当向缓存中添加许多项时抛出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);
}
我的代码有什么问题?
在visual studio中进入
解决方案>属性>平台配置属性>
如果您需要使用这么多内存,请确保您正在为x64编译。(您已达到32位限制)
您指定了内存限制,但没有指定应该轮询以缩减缓存的时间。您可以添加:
NameValueCollection config = new NameValueCollection
{
{"cacheMemoryLimitMegabytes", "4000"},
{"physicalMemoryLimitPercentage", "100"},
{"pollingInterval", TimeSpan.FromMinutes(5).ToString()}
};
指示CLR在缓存中每5分钟查找要驱逐的对象。