C#(WPF)数据表内存管理(建议指南)
我正在使用WPF,我在使用内存释放编写的应用程序中遇到了一些问题。 我看了很多帖子和博客等,无法摆脱这个问题 我决定从头开始编写一个简单的wpf应用程序,只完成一项任务 问题 我希望有多个数据表,并将数据存储到其中,然后清除它们。 一旦数据表被清除,内存也应该被清除 问题是我发现记忆永远不会消失 测试应用程序 我的主窗口中有一个数据表,有几个按钮C#(WPF)数据表内存管理(建议指南),c#,wpf,memory-management,memory-leaks,garbage-collection,C#,Wpf,Memory Management,Memory Leaks,Garbage Collection,我正在使用WPF,我在使用内存释放编写的应用程序中遇到了一些问题。 我看了很多帖子和博客等,无法摆脱这个问题 我决定从头开始编写一个简单的wpf应用程序,只完成一项任务 问题 我希望有多个数据表,并将数据存储到其中,然后清除它们。 一旦数据表被清除,内存也应该被清除 问题是我发现记忆永远不会消失 测试应用程序 我的主窗口中有一个数据表,有几个按钮 添加数据(循环大约100000次,并将数据添加到数据表中,数据表是一个整数和一个字符串) 数据表的Call.Clear() 将数据表设置为空 报告存储
private void Button_Click(object sender, RoutedEventArgs e)
{
if (dt == null)
{
dt = new DataTable();
}
if (dt.Columns.Count == 0)
{
dt.Columns.Add("number", typeof(int));
dt.Columns.Add("text", typeof(string));
}
for (int i = 1; i < 100000; i++)
{
Debug.WriteLine(i);
DataRow dr = dt.NewRow();
dr["number"] = i;
dr["text"] = "hello world";
dt.Rows.Add(dr);
}
GetMemory();
}
private void按钮\u单击(对象发送者,路由目标)
{
如果(dt==null)
{
dt=新数据表();
}
如果(dt.Columns.Count==0)
{
添加(“编号”,类型(int));
添加(“文本”,类型(字符串));
}
对于(int i=1;i<100000;i++)
{
Debug.WriteLine(i);
DataRow dr=dt.NewRow();
dr[“number”]=i;
dr[“text”]=“你好,世界”;
dt.Rows.Add(dr);
}
GetMemory();
}
我试图为数据表创建一个属性,但没有任何区别,直到我手动调用GC,内存达到60MB,这比加载应用程序时要少。
我等了34分钟才手动按下GC按钮
完全混淆任何帮助、学习材料或最佳实践的方向将是最受欢迎的。也许这会有所帮助:这看起来像是很棒的文档,我需要一段时间来通读,所以我不能说它解决了问题,但我会看一看。到目前为止,它肯定有我需要的东西。在进一步播放之后,我点击添加按钮,直到我达到1GB的内存,我可以看到GC实际上收集了“一些”内存,但对我来说,这似乎是垃圾?为什么我想让我的记忆看起来像是86%被使用了。另外,如果我清除DataTable并将其设置为null,然后运行GC,它将下降到86MB,这非常棒,但我不应该调用GC。我需要弄清楚那部分。