【发布时间】:2018-02-15 12:36:49
【问题描述】:
假设我有类似关注的东西
- 一堆数据类
- 大部分数据类的列表
- 加载 List
- >> 类以表示至少 3D 数组
- 由于线程访问,在不同页面中使用了一些 App.MyViewModel 视图模型
- 视图模型非常复杂,我喜欢大量的属性链接回第 3 点
- 最后,每个 ListView 模板都是从 List 之一生成的 ObservableCollection
创建的
在生命周期中,这些列表可能会被重新新建多次,我希望这应该回收以前使用的内存吗?列表视图行/单元格被创建为网格。 在多达数十行的小型列表视图中,它运行良好且快速,不会过多地增加内存使用。 但是,在包含数千行的大型数据集上,即使滚动 ListView 有时也会使应用程序崩溃,并且内存随着数据的每个部分而急剧增加。 所以问题真的是,根据您自己的经验,在故障排除和重新设计方法时您会推荐什么?
【问题讨论】:
-
在 C# 中重新实例化列表或对象不会回收其内存。它在内存中创建一个全新的实例,并将旧数据留给垃圾收集器以释放内存。
-
这对我来说很好。 :) 在分析应用程序时,我可以看到 GC 启动并执行某些操作,但显然还不够,因为内存使用量一直在增长。因此,我想以一种艰难的方式解决这个问题的方法之一是在某个阶段强制 GC 释放我在应用程序上的所有视图模型。但是在线阅读并不是一个好主意。
-
-
您的实际行/单元格是什么样的,它们是否包含图像?根据我的经验,不正确的图像尺寸是内存问题中最常见的问题。
-
@MichaelRandall 我正在分析更多并放弃 GC 强制执行的想法,你是对的。
标签: c# listview memory architecture xamarin.forms