我从未尝试过使用 MemoryCache,我正在尝试理解它。我正在试验当超过 cachememorylimit 兆字节时它将如何修剪/删除缓存中的缓存条目。用1兆测试它
//Initialization...
var cacheSettings = new NameValueCollection(3);
cacheSettings.Add("cacheMemoryLimitMegabytes", Convert.ToString(1));
cacheSettings.Add("pollingInterval", Convert.ToString("00:00:01"));
cacheSettings.Add("physicalMemoryLimitPercentage", Convert.ToString(1));
cache = new MemoryCache("test", cacheSettings);
CreateExistingCacheTest();
private void CreateExistingCacheTest()
{
int z = 0;
while (z < 10)
{
var hashSet = new HashSet<string>();
var i = 0;
while (i < 100000)
{
hashSet.Add(Guid.NewGuid()
.ToString());
i++;
}
cache.Add(new CacheItem(z.ToString(), hashSet), new CacheItemPolicy());
z++;
}
还有一个按钮,只添加一个新的缓存项
private HashSet<string> CreateDummyValues()
{
var hashSet = new HashSet<string>();
var i = 0;
while (i < 1000000)
{
hashSet.Add(Guid.NewGuid()
.ToString());
i++;
}
return hashSet;
}
private void ButtonBase_OnClick(object sender,
RoutedEventArgs e)
{
var dummyValues = CreateDummyValues();
var cacheItem = new CacheItem(keystring.Text, dummyValues);
cache.Add(cacheItem, new CacheItemPolicy());
Debug.WriteLine(cache.GetCount());
}
问题: 为什么设置 cacheMemoryLimit 看起来不像它应该如何驱逐缓存条目?它似乎没有驱逐以前的 CacheEntries ,因为它没有任何关于如何驱逐它的 CacheItemPolicy。一旦我按下按钮,我希望它会删除以前的缓存条目,因为我正在尝试添加一个值超过 1 mb 的缓存项。