1

我从未尝试过使用 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 的缓存项。

4

0 回答 0