全部,
我开发了一个 WCF ODATA 服务应用程序并将其托管在 IIS7 中。服务应用程序有一个内存缓存,如果客户端空闲大约 15 分钟左右,它会丢失所有缓存值。
在进行故障排除时,我发现应用程序逻辑是正确的,并且不会从缓存中批量删除对象。
所以,如果 IIS 在很长一段时间内没有连接到它的客户端时是否会清除服务对象,我会感到困惑。?
这种 GC 行为是真的吗?如果是这样,我该如何控制它?
任何帮助深表感谢。
谢谢
全部,
我开发了一个 WCF ODATA 服务应用程序并将其托管在 IIS7 中。服务应用程序有一个内存缓存,如果客户端空闲大约 15 分钟左右,它会丢失所有缓存值。
在进行故障排除时,我发现应用程序逻辑是正确的,并且不会从缓存中批量删除对象。
所以,如果 IIS 在很长一段时间内没有连接到它的客户端时是否会清除服务对象,我会感到困惑。?
这种 GC 行为是真的吗?如果是这样,我该如何控制它?
任何帮助深表感谢。
谢谢
默认情况下,IIS7 应用程序池设置了 20 分钟的空闲超时值,之后应用程序池与所有缓存数据一起从内存中卸载。
您可以通过在 IIS 管理器中选择托管您的站点的应用程序池,在“操作”窗格中选择“高级属性”,然后设置“空闲时间”的值来增加空闲超时甚至将其设置为“0”,从而使其永不超时-out(分钟)值'到您想要的新超时,然后单击确定。(在 Brad Kinsley 的博客“IIS7 应用程序池空闲超时设置”中有几个屏幕截图
要考虑的一种选择是设置进程外缓存,这样即使 IIS 确实回收了您的应用程序,内存缓存也会保留或为现有缓存设置后备存储,以便在应用程序池回收时缓存重新填充后备商店。
Enterprise Library 的缓存应用程序块是具有这种后备存储的缓存解决方案的一个示例。有关更多信息,请参阅“缓存应用程序块和数据库后备存储”。