【发布时间】:2010-11-11 00:07:43
【问题描述】:
我有一些地方实现某种缓存可能有用。例如,在基于自定义字符串进行资源查找、使用反射查找属性名称或每个属性名称只有一个 PropertyChangedEventArgs 的情况下。
最后一个的简单例子:
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,那意味着我们最终会得到一个巨大的缓存,永远不会被垃圾收集或任何东西。我在想如果缓存的是更大的值,如果应用程序是一个长期运行的应用程序,这可能最终会成为一个问题......或者你怎么看?一个好的缓存应该如何实现?对于大多数用途来说,这是否足够好?有没有一些不太难理解或太复杂而无法实现的不错的缓存实现示例?
【问题讨论】:
-
"计算机科学中只有两个难点:缓存失效和命名。" -- Phil Karlton
-
这不值得一个完整的答案,但这个特定的实现在多线程环境中会失败。至少,您需要在
GetPropertyChangedEventArgs()中锁定对cache的访问权限。只是想帮助任何出现并复制意大利面的人。
标签: c# performance caching resources memory-management