c# - 如何证明弱引用已释放?
问题描述
我正在尝试测试一些使用WeakReference
的代码 - 如何强制收集参考对象以便reference.Target
返回null
?
我试过了
WeakReference reference = new WeakReference(null);
{
reference.Target = new object();
}
Console.WriteLine(reference.Target);
GC.Collect();
Thread.Sleep(1000);
Console.WriteLine(reference.Target);
Console.ReadLine();
但目标不是null
在这两种情况下。也尝试多次调用GC.Collect
,但似乎没有任何区别。
解决方案
在发布版本(启用优化)中运行代码并在不调试的情况下启动,垃圾收集器很好地展示了预期的行为。
调试器会将您的变量作为 GC 根保留在范围内,以防您需要检查它们。
另外,使用通用版本,WeakReference<T>
. 非泛型的 API 使用问题已在泛型中解决。见:http ://www.philosophicalgeek.com/2014/08/14/prefer-weakreferencet-to-weakreference/
编辑:没有刷新并且通知帖子是旧的并且评论已经涵盖了这一点。
推荐阅读
- android - ViewPager2 PagedList DiffUtil FragmentStateAdapter 中的片段重新创建时数据未刷新
- azure - AuthorizeForScopesAttribute 的内联等效项
- ruby-on-rails - nio4r gem 无法使用本机扩展构建(尝试安装 redmine_knowledgebase 插件)
- webpack - Karma Webpack - 每次都重新编译(真的)
- java - 通过过滤从多个表中选择数据
- delphi - 在 Rave 5/Delphi 7 中安装 ND_JPEG 组件时出现问题
- javascript - 选中复选框时更改父元素背景
- powershell - ServiceNow REST API 和 PowerBI
- nginx - 无法使用域访问 nginx 但可以使用直接 ip
- javascript - GraphQL 对象查询