弱引用理解

2024-01-12

我想创建所有 ViewModel 的字典。

   public static Dictionary<string, WeakReference> vmCollection = new Dictionary<string, WeakReference>();

像这样添加

 vmCollection.Add(name, new WeakReference(viewModel));

并像这样调用所需的方法..

((vmCollection[viewModel].Target) as BaseViewModel).NewMessage(message);

我需要将其维护为WeakReference?如果我不将其维持为WeakReference.


不使用的唯一后果WeakReference字典中的引用将阻止视图模型实例被垃圾收集。 AWeakReference允许垃圾收集(假设其他地方没有其他可靠的引用)。

当一个项目没有对其的引用时,它就符合垃圾回收的条件。WeakReference不会创建“可数”引用,因此您可以保留对它的某种引用,但如果您的WeakReference是唯一剩下的看着它的东西。

您是否需要它实际上取决于您的视图模型具有什么样的生命周期。如果他们需要处置或以其他方式“放手”,那么您可能需要使用WeakReference或者公开一种从字典中删除引用的方法。

正如我在评论中提到的。我倾向于错误地避免使用WeakReference而不是显式处理相关对象的生命周期。也就是说,当您根本无法了解相关点的生命周期时,它们很有用。我认为在你的情况下,你应该有必要的可见性,因为这些都可能在 UI 层,因此应该尝试not使用它们。

这是有关该主题的资源:

  • 弱引用 MSDN 文章 https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/weak-references

指南摘自上述 MSDN 链接:

仅在必要时才使用长弱引用作为状态 对象在终结后是不可预测的。

避免对小对象使用弱引用,因为指针 其本身可能同样大或更大。

避免使用弱引用作为内存的自动解决方案 管理问题。相反,开发一个有效的缓存策略 处理应用程序的对象。

我相信最后一条指导方针适用于您的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

弱引用理解 的相关文章

随机推荐