如果这是更多的serverfault vs.stackoverflow,请原谅。它似乎在边界上。

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

  • 对象消耗的内存量似乎远远超过了10GB的计算量。
  • 最大关注点:我们似乎无法使用服务器中32GB的60%以上。

  • 到目前为止,我们已经尝试过:

    在machine.config/system.web中(sf不允许使用标签,请原谅格式):
    processModel autoConfig="true" memoryLimit="80"
    

    在web.config/system.web/caching/cache中(sf不允许使用标签,请原谅格式):
     privateBytesLimit = "20000000000" (and 0, the default of course)
     percentagePhysicalMemoryUsedLimit = "90"
    

    环境:
    Windows 2008R2 x64
    32GB内存
    IIS7

    似乎没有什么能让我们超过60%的值(value)。
    请参阅任务员的屏幕截图。

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

    最佳答案

    有点晚了,但我遇到了几乎相同的问题。 processModel上memoryLimit设置的问题在于,尽管已被记录下来,但它似乎没有任何作用。
    percentagePhysicalMemoryUsedLimit同样看起来应该可以执行某些操作,但是没有任何效果。
    privateBytesLimit="20000000000"确实可以工作。我去调试了该过程,找到了CacheMemorySizePressure对象,它成功获取了该值并将其设置为_memoryLimit。我会仔细检查。

    另一个选项是在IIS应用程序池上设置“专用内存使用回收”阈值。这也应该被接受并覆盖默认的60%限制。

    第三种选择是使用新的 MemoryCache 类并在其上设置PhysicalMemoryLimit

    10-05 23:54