我有一些實施某種緩存可能會有用的地方。例如,在執行基於自定義字符串的資源查找的情況下,使用反射查找屬性的名稱,或者每個屬性名稱只有一個PropertyChangedEventArgs
。C#:如何實現智能緩存
最後一個一個簡單的例子:
public static class Cache
{
private static Dictionary<string, PropertyChangedEventArgs> cache;
static Cache()
{
cache = new Dictionary<string, PropertyChangedEventArgs>();
}
public static PropertyChangedEventArgs GetPropertyChangedEventArgs(
string propertyName)
{
if (cache.ContainsKey(propertyName))
return cache[propertyName];
return cache[propertyName] = new PropertyChangedEventArgs(propertyName);
}
}
但是,將這項工作呢?例如,如果我們有一個不同的propertyNames的整個負載,這將意味着我們最終會有一個巨大的緩存坐在那裏永遠不會被垃圾收集或任何東西。我在想象如果緩存的是更大的值,並且如果應用程序是長期運行的應用程序,這可能最終會成爲一個問題......或者您認爲什麼?一個好的緩存應該如何實現?這對於大多數目的來說足夠好嗎?一些好的緩存實現的任何例子都不太難理解,或者實現過於複雜?
「*只有兩種計算機科學堅硬的東西:緩存失效和命名的事情*」菲爾 - Karlton – JulianR 2011-11-01 20:19:33
這是不值得一個整體的答案,但這個特定的實現會在多線程環境中出現失敗。在最低限度,你需要鎖定`GetPropertyChangedEventArgs()`中對`cache`的訪問。 只是試圖幫助任何人來到這裏,並複製麪食。 – aaronburro 2016-12-09 16:45:25