我正在使用.net 4内存缓存。我想将缓存的大小限制为10mb,因为我不希望我的应用程序滥用其中的内容。
我还想知道在任何给定时间我的缓存有多少内存。我怎么能在运行时告诉你?
答案 0 :(得分:42)
您可以使用namedCaches元素指定应用程序配置文件中MemoryCache
专用的最大物理内存量,也可以在创建MemoryCache
实例时传入设置通过NameValueCollection
传递到constructor,方法是在条目中添加cacheMemoryLimitMegabytes密钥和值10
的条目。
以下是namedCaches
配置元素的示例:
<configuration>
<system.runtime.caching>
<memoryCache>
<namedCaches>
<add name="Default"
cacheMemoryLimitMegabytes="10"
physicalMemoryLimitPercentage="0"
pollingInterval="00:05:00" />
</namedCaches>
</memoryCache>
</system.runtime.caching>
</configuration>
以下是在创建过程中如何配置MemoryCache
:
//Create a name / value pair for properties
var config = new NameValueCollection();
config.Add("pollingInterval", "00:05:00");
config.Add("physicalMemoryLimitPercentage", "0");
config.Add("cacheMemoryLimitMegabytes", "10");
//instantiate cache
var cache = new MemoryCache("CustomCache", config);
这个blog post详细介绍了配置MemoryCache
对象的所有方法,并且一些示例是根据此来源改编的。
答案 1 :(得分:7)
您可以在配置中执行此操作...例如......
<system.runtime.caching>
<memoryCache>
<namedCaches>
<add name="Default"
cacheMemoryLimitMegabytes="52"
physicalMemoryLimitPercentage="40"
pollingInterval="00:04:01" />
</namedCaches>
</memoryCache>
</system.runtime.caching>
要在代码中执行此操作,请参阅... this msdn page
答案 2 :(得分:5)
此时似乎无法强制分配给缓存的最大内存量。有关详细信息,请参阅此帖子:MemoryCache does not obey memory limits in configuration