我一直在调查如何避免由视图模型强烈引用INotifyCollectionChanged事件引起的内存泄漏.我正在玩一个ListCollectionView来查看是否会为我处理它.我认为以下是泄漏记忆,我做错了什么?
var stuff = new ObservableCollection<string>(); while (true) { var result = new ListCollectionView(stuff); // Just to keep make sure that the memory I'm seeing // isn't waiting to be GC'd GC.Collect(); }
解决方法
我最初发表了这个评论,但我认为这是一个更好的答案,所以…
a)如果你确定你发现了.NET框架的一个问题,你可能会做错事.这不是不可能的,只是不太可能.
b)GC.Collect()不会做你正在想的事情.
我想你需要检查GC.Collect()的工作原理.
备注
使用此方法尝试回收所有不可访问的内存.
所有对象,无论他们在记忆中多久,都被考虑收藏;但是,托管代码中引用的对象未被收集.使用此方法强制系统尝试回收最大可用内存量.
对于初学者,您不会告诉我们您在处理该内存的位置,即ListCollectionView(东西).你只是分配新的和分配新的,但你永远不会处理旧的.那么是的,它会像疯狂一样泄漏.直到GC运行并尝试收集.
如果你做同样的事情,你在这里展示一个字符串列表,它很有可能做同样的事情.但是对于你所展示的,我期望它泄漏.