分析弱引用时阻止垃圾收集器

5

我正在尝试使用弱引用(WeakReference),编写代码在返回对象的强引用之前检查弱引用是否有效。

if (weakRef.IsValid)
    return (ReferencedType)weakRef.Target;
else
    // Build a new object

我该如何防止GC在“IsValid”和“Target”调用之间收集对象?
1个回答

7
你应该像这样做:
var rt = weakRef.Target as ReferencedType;

if (rt != null)
    // You now have a strong reference that you can safely use

如果您成功获取了强引用,那么就可以确保它不会被GC回收。在MSDN的WeakReference页面中提供了一个更完整的示例,如果您还没有阅读过它,您可能也会发现以下内容有用:弱引用

这对我来说似乎是最“自然”的方式。为了完整性,它需要使用短弱引用,但在我的情况下不是问题。 - Coffee on Mars
+1 是唯一确定的方法。但我认为您不需要将其转换为所需的“ReferenceType”。您也可以将其作为“object”获取并对其进行空值检查。根据您接下来想要对对象执行的操作,这可能是有意义的,但不需要确保实例存在。 - Oliver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接