|
|
1
28
ConditionalWeakTable Class 使用弱键并在表外不存在对键的其他引用时自动删除键/值项。 |
|
|
2
5
你得自己写。它应该是相对直接的,实现IDictionary接口,然后将实际值存储为weakreferences。然后,您可以检查“添加/选择”上的值,以查看它们是否仍处于活动状态。 伪代码-不会真正编译:
|
|
|
3
0
对值进行weakreferences是一回事,但我发现字典键也可能是内存泄漏的来源。下面是一个简单的实现,它引用了键:
|
|
|
4
0
简单地持有一本weakreference对象字典的一个问题是,除了列举整个字典之外,没有办法从字典中删除任何目标超出范围的weakreference对象。 如果一个weakreference可以包含一个委托,当主目标超出范围时将调用该委托,这将是很有帮助的。据我所知,没有办法做到这一点。如果您不介意向“弱字典”中存储的对象添加另一个字段和一点代码,我建议创建一个我称之为“finasposer”的对象,其唯一字段是一个MethodInvoker;释放后,MethodInvoker应为空;终结器应为互锁.exchange()MethodInvoker为空,并且--如果它的ld值非空--调用它。要在字典中写入的对象应该创建一个新的finasposer对象,该对象带有一个委托,该委托将在方便时从字典中删除键。 请注意,终结器和由此调用的任何委托都不应直接操作字典,也不应执行任何需要获取锁的操作。如果finasposer持有委托,则该委托本身在finalize执行时是有效的,但附加到委托的对象及其引用的任何对象可能处于意外状态。但是,对于finasposer调用的方法来说,将对超出范围的对象的引用添加到链接列表应该是安全的。字典的添加、删除和其他方法可以对链接列表进行轮询,以查看其中的任何weakerence是否已经消失,是否需要清除。 |
|
|
5
0
如果不能使用标识比较,则ConditionalWeakTable不是选项。 在这种情况下,我敢建议我们实施 WeakTable.cs , 以及我们在博客中的描述 WeakTable . |
|
|
bairog · 从按属性筛选的对象数组字典中创建值数组 1 年前 |
|
|
prayner · 更新嵌套字典包含列表中的项 1 年前 |
|
|
KGB91 · 初始化一个用C存储函数的字典# 1 年前 |
|
|
Pavel Foltyn · 如何在C中生成逆字典# 1 年前 |
|
|
user24242514 · 将嵌套查询字符串请求转换为字典 1 年前 |
|
|
Pernoctador · Python映射可以复制吗?我需要参考地图 1 年前 |
|
|
masher · 如何将字典键的值直接赋值给另一个变量? 1 年前 |
|
|
Lyapunov1729 · 如何按项目连接字典 1 年前 |