如何在ASP.NET缓存应用程序中超过IIS7的60%内存限制

evi*_*not 6 c# asp.net iis-7 caching

请原谅,如果这是更多的服务器故障与stackoverflow.它似乎在边境.

我们有一个应用程序,它使用ASP.NET缓存为电子商务应用程序缓存大量产品数据.这是一个包含65K元素的字典对象,我们的计算将对象的大小设置为~10GB.
问题:

  1. 对象消耗的内存量似乎远远超过我们的10GB计算量.

  2. 最大的关注: 我们似乎无法使用服务器中超过60%的32GB.

到目前为止我们尝试过的:

在machine.config/system.web中(sf不允许标记,请原谅格式化):

processModel autoConfig="true" memoryLimit="80"
Run Code Online (Sandbox Code Playgroud)

在web.config/system.web/caching/cache中(sf不允许使用标记,请原谅格式化):

 privateBytesLimit = "20000000000" (and 0, the default of course)
 percentagePhysicalMemoryUsedLimit = "90" 
Run Code Online (Sandbox Code Playgroud)

环境: Windows 2008R2 x64 32GB RAM IIS7

似乎没有什么能让我们超过60%的价值.查看taskman的截图.

http://www.freeimagehosting.net/image.php?7a42144e03.jpg

Art*_*old 1

您是否考虑过使用不同的缓存策略?内置的缓存功能并不丰富,您将很难让它做更多的事情(除非某些 IIS 专家有一些聪明的工作)。

我们花了很多时间在这上面并且放弃了。我们实际上使用更精简的对象来存储在缓存中,并根据需要获取更完整的对象。

当我们需要考虑这一点时,我们研究了 Memcached 和 Velocity,但暂时没有部署它们。但它们的功能更加丰富。

另外,您如何通过代码将项目存储在缓存中?您是在应用程序开始时还是在第一次请求之后将它们放在那里?我问的原因是您的缓存键是否有效,并且实际上您一遍又一遍地填充缓存并且没有检索任何内容(这可能只是一种对象类型的情况)。例如,我们通过将时间附加到特定于日期的缓存键来成功做到这一点。