我想创建所有 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(使用前将#替换为@)