【发布时间】:2012-09-07 21:08:58
【问题描述】:
- 我的字典中填充了 WeakReferences。
- Web 服务 A:创建对象并将其放置在弱引用字典中。 (1)
- Web 服务 A 有时会保留具有强引用的对象,有时则不会。
我的问题:
我无法跟踪应该从弱引用字典中删除的对象,因为垃圾收集器不会立即收集它们,它只会在随机且不可预测的时间后收集。
行为不一致,例如
示例 1:按预期工作,立即收集变量 ex1。
Sub Example1(id as integer)
Dim ex1 as new Object
dim t as new WeakReference With {.target = ex1};
WeakReferenceDictionary.add(id,ex1)
End Sub<br>
Example2 '这不起作用,ext1 没有立即收集
Sub Example1(id as integer)
Dim ex1 as new Object
dim t as new WeakReference With {.target = ex1};
WeakReferenceDictionary.add(id,ex1)
otherclass.refObject = ex1
otherclass.refObject = Nothing
End Sub<br>
我试过了。
将 WeakDictionary 放在 Module1 中(是一个控制台应用程序)。
GC.收集
GC.Collect(0)
GC.Collect(1)
GC.Collect(2)
我的问题。 无论如何,即使它会降低我的应用程序的性能,是否真的强制进行垃圾收集。我知道我不应该将 GC 用于逻辑目的,但对于我的解决方案来说,这样做真的很方便。
【问题讨论】:
-
当然可以……我自己并不喜欢这种解决方案,但我只需要在这些对象没有被任何应用程序引用的记录器时跟踪它们。在所有应用程序中实现引用计数器将是一项巨大的工作,使用垃圾收集算法肯定会更加简单、优雅和可靠。我只是想知道是否有一种方法可以真正强制它,而不仅仅是向 GC 提出建议。
标签: .net garbage-collection weak-references