背景
我有一个显示客户列表的应用程序。用户可以创建一个新窗口来查看特定客户的详细信息。
新窗口创建过程的一部分创建一个List<OverviewItem>
,其中OverviewItem
定义为
public class OverviewItem
{
public string Title { get; set; }
public string Info { get; set; }
public OverviewItem(string title, string info)
{
this.Title = title;
this.Info = info;
}
}
接下来是 25 行代码,类似于以下内容:
overviewItems.Add(new OverviewItem("some label string", "some value string"));
然后我将列表绑定到在窗口的 XAML 中定义的 DataGrid,如下所示:
dgOverview.ItemsSource = overviewItems;
当我运行应用程序时,我可以在任务管理器**中看到,在创建列表的点和添加第 25 个项目的点之间(在 DataGrid 绑定之前),占用了将近 20MB 的内存。
问题是当我关闭窗口时,内存没有被清除。如果我再次打开窗口,又会占用 20MB 内存,并且每次打开后续窗口时都会占用 20MB 内存。
我的印象是 .net 框架会为我管理内存,但在这种情况下似乎没有这样做。使用几天后,应用程序将占用超过 1.4GB 的内存,此时用户开始遇到OutOfMemoryException
错误。
** 我知道它不是内存分析器,但它是我目前唯一拥有的东西
问题
所以问题是:
- 为什么创建看似一些简单的对象会占用如此多的内存。
- 关闭窗口为什么不清除,如何强制清除?