我很确定这是一个重复的问题,但我找不到原文。
我得到了一些我需要“附加”一些信息的对象。基本上,如果该对象回到同一段代码,我需要看到我之前已经看过它。
即。像这样的东西:
Dictionary<WeakReference<ObjectType>, string> _Cache;
注意那里的弱引用(我知道WeakReference不是通用的btw),我需要使缓存的键成为弱引用,以处理对象被GC控制的事实。
现在,我可以让缓存充满弱引用,但我似乎回想起.NET中已经存在的类似类型的系统,它与对象一起自动GC。
请注意,我不记得这样做的开销,所以在确定这是否是一个比我自己的缓存好的/更好的解决方案之前,我会确保阅读这个主题。不幸的是我无法更改有问题的对象,所以我需要在其他地方跟踪这个元信息。
我的局限:
基本上是这样的:
PropertyAttacher.Attach(instance, "Name", name);
我记得没错吗?涉及的课程是什么?
答案 0 :(得分:6)
您可能正在寻找.NET 4的ConditionalWeakTable<TKey, TValue>
答案 1 :(得分:3)
也许你可以建立一个由RuntimeHelpers.GetHashCode索引的字典。
来自MSDN:
RuntimeHelpers.GetHashCode在您关心的场景中非常有用 对象身份。将返回两个具有相同内容的字符串 RuntimeHelpers.GetHashCode的不同值,因为它们是 不同的字符串对象,虽然它们的内容是相同的。
编辑: @Simon Mourier的解决方案似乎更好。