c#-在.NET集合中剔除WeakReferences的最佳时间
作者:互联网
我有一个收藏夹(我正在写Weak Dictionary),并且需要定期剔除已死的WeakReferences.我通常看到的是在“添加”和“删除”方法中进行检查,并说:“对集合进行X修改后,就该淘汰了.”这对于我来说是可以接受的,但是似乎应该有一个更好的方法.
我真的很想知道GC何时运行并在之后立即运行我的清理代码.毕竟,GC可能是确定何时清除死引用的最佳时机.我找到了Garbage Collection Notifications,但是看起来好像不是我想要的.我不想产生一个单独的线程只是为了监视GC.理想情况下,我的集合将实现IWantToRunCodeDuringGC或订阅System.GC.Collected事件.但是.NET框架可能无法信任用户代码在GC期间运行…
也许还有另一种我忽略的方法.
编辑:我认为我的代码在GC之后,之前还是期间运行都没关系.
解决方法:
我猜您想创建一个弱字典作为“延迟”缓存某些数据的一种方式.
您需要考虑以下事实:GC将非常频繁地发生,并且如果没有其他对象引用它们,则弱引用在大多数情况下将消失.大约每分配256KB内存,就会发生GC.这是经常的.
通过将高速缓存实现为具有最大元素数的字典,可能会更好.然后,您可以使用最近最少使用的算法或基于时间的算法将元素推出集合.通常,这种方法比使用弱引用具有更好的性能和内存消耗.
标签:weak-references,c,net,garbage-collection 来源: https://codeday.me/bug/20191208/2091815.html