当向缓存中添加许多项时抛出OutOfMemoryException

本文关键字:OutOfMemoryException 许多项 添加 缓存 | 更新日期: 2023-09-27 18:15:11

对于一些繁重的计算,我想把临时结果放在MemoryCache中,并在需要时再次加载。但是当我把200万对象放入缓存时,它抛出了OutOfMemoryException。

我在windows 7 64位8GB内存上运行程序。

当我查看任务管理器时,我看到我的应用程序只占用1.5 GB的内存,然后崩溃了。这段代码类似于我在程序

中所做的。
NameValueCollection config = new NameValueCollection
{
    {"cacheMemoryLimitMegabytes", "4000"},
    {"physicalMemoryLimitPercentage", "100"}
};
MemoryCache cache = new MemoryCache("MyCache", config);
CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = ObjectCache.InfiniteAbsoluteExpiration };
for (int i = 0; i < 4000000; i++)
{
    var resultOfTempOperation = DoOperation();
    CacheItem newEmployee = new CacheItem(Guid.NewGuid().ToString(), new SomeClass());
    cache.Add(newEmployee, policy);
}

我的代码有什么问题?

当向缓存中添加许多项时抛出OutOfMemoryException

在visual studio中进入

解决方案>属性>平台配置属性>

如果您需要使用这么多内存,请确保您正在为x64编译。(您已达到32位限制)

您指定了内存限制,但没有指定应该轮询以缩减缓存的时间。您可以添加:

NameValueCollection config = new NameValueCollection
{
    {"cacheMemoryLimitMegabytes", "4000"},
    {"physicalMemoryLimitPercentage", "100"},
    {"pollingInterval", TimeSpan.FromMinutes(5).ToString()}
};

指示CLR在缓存中每5分钟查找要驱逐的对象。

相关文章:
  • 没有找到相关文章