C# 检查垃圾收集

C# 检查垃圾收集,c#,garbage-collection,C#,Garbage Collection,有没有办法检查哪些实例类是由GC收集的,哪些不是? 我发现的一个选项是按测试检查类,如下所述: 创建一个referencetest类,该类将保存一个字典的每周引用 字典使用它们来测试类是否存在。 然后调用GC.Collect() 然后再次检查referencetest,如果类仍然存在 有没有办法检查哪些类是由GC收集的,哪些不是 不,因为要检查一个对象,您仍然需要对它的引用,这将阻止它的收集 你可以用弱引用建立一个管理,但那将是尴尬和昂贵的。当然,并非对所有对象都可行 更重要的是,你不应该需要这

有没有办法检查哪些实例类是由GC收集的,哪些不是? 我发现的一个选项是按测试检查类,如下所述:


创建一个
referencetest
类,该类将保存一个
字典
的每周引用 字典使用它们来测试类是否存在。 然后调用GC.Collect()

然后再次检查
referencetest
,如果类仍然存在

有没有办法检查哪些类是由GC收集的,哪些不是

不,因为要检查一个对象,您仍然需要对它的引用,这将阻止它的收集

你可以用弱引用建立一个管理,但那将是尴尬和昂贵的。当然,并非对所有对象都可行


更重要的是,你不应该需要这个。如果你认为你这样做了,那就分析一下你的思路

您还可以判断何时通过调用终结器对对象进行垃圾收集。这并不是100%保证的,因为您仍然对将阻止收集的类调用GC.superssFinalize()。

在哪里需要它?类不是由GC收集的,但所有类的实例都是。通常,您可以通过对集合进行弱引用并查看它是否仍然存在来测试集合,但如何最好地进行测试可能取决于您需要什么。@JonHanna,对不起,错过了“实例”一词。我正试图以正确的方式编写代码,避免内存泄漏。因此,我想检查哪些实例仍然处于“活动”状态,即使我没有使用它们,它们也不会被收集。有一大堆原因导致无法调用终结器,
SuppressFinalize()
。无法保证终结器会被调用。拥有终结器(析构函数)是非常昂贵的。您不希望在所有(许多)对象上都出现这种情况。