我使用新System.Runtime.Caching庫在我的應用程序緩存,並且在App.config定義如下它:System.Runtime.Caching不釋放的BitmapImage對象
<system.runtime.caching>
<memoryCache>
<namedCaches>
<add name="MyCache" cacheMemoryLimitMegabytes="10"
physicalMemoryLimitPercentage="30" pollingInterval="00:00:10" />
</namedCaches>
</memoryCache>
</system.runtime.caching>
然後,從我的代碼實例是這樣的:_cache = new MemoryCache("MyCache");
並添加條目是這樣的:_cache.Add(resourceName, resource, new CacheItemPolicy());
我用這個緩存來存儲BitmapImage
對象,並確保高速緩存正常工作,我已經增加了10 BitmapImage
個對象緩存,每個緩存大約7MB的圖像。然後,我等待了十秒鐘的輪詢發生並檢查了緩存中的條目,但他們都在那裏。沒有一個物體被驅逐。
我在這裏做錯了什麼?我知道這些設置是從App.config中正確讀取的。是否有可能BitmapImage
實例本身很小,只能引用磁盤上的映像?高速緩存如何確定對象的大小?
我用'的char []'進行了測試,項目被拆遷戶即使我用'新CacheItemPolicy()'。無論哪種方式,爲了添加一個項目到緩存中,我必須提供一個'CacheItemPolicy'參數。爲了獲得所要求的行爲,我需要傳遞什麼值? – 2012-01-05 19:23:09
更新了我的答案 – 2012-01-06 03:11:53
這仍然不會給我所要求的行爲。我不想明確設置項目過期的時間 - 如果超過了'app.config'中定義的內存限制,我希望它們過期。另外,我很肯定你對於在31/12/9999 11:59:59 PM +00:00到期的項目是錯誤的,因爲正如我在上面的評論中所說的那樣,即使當我添加他們與政策'新CacheItemPolicy()'。 – 2012-01-06 11:36:43