ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-在.NET集合中剔除WeakReferences的最佳时间

2019-12-08 13:17:19  阅读:213  来源: 互联网

标签:weak-references c net garbage-collection


我有一个收藏夹(我正在写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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有