如何强制缩小 DataTable 和/或 List 以便有效释放内存?我目前在循环的每次迭代中都从 DataSet 中删除已处理的行,但我不确定是否正在释放内存。
for (int i = m_TotalNumberOfLocalRows - 1; i >= 0; i--)
{
dr = dt.Rows[i];
// Do stuff
dt.Rows.Remove(dr);
}
如果这不能缩小 DataTable 在内存中的占用空间,我可以使用 List。我只使用 DataTable 作为 DataRows 的存储,我可以使用任何内存不足的集合或存储机制,并且能够在每 x 次迭代中释放内存。
谢谢你。
编辑:在阅读了哪些是好的 .NET Profilers 之后进行了一些内存分析之后?我发现内存的主要消费者是字符串。
在这个过程中我们做了大量的用户输出,内存消耗在大约 170MB-230MB 之间循环,峰值在 300MB 左右。我正在使用初始大小为 20971520 的 StringBuilder 来保存正在发生的事情的输出/日志,在处理完记录总数的百分之一后,我将 DevExpress MemoEdit 控件的 Text 属性设置为 StringBuilder.ToString ()。我发现这种方法比将 StringBuilder.ToString() 附加到 MemoEdit.Text 更快(显然 StringBuilder 的逻辑在附加和设置 MemoEdit.Text 之间是不同的)
我还发现,与其重新创建 StringBuilder(20971520) 相比,它在内存上更容易,执行起来也更快StringBuilder.Remove(0, StringBuilder.Length)
在处理大字符串时,您是否可以分享任何技巧来提高性能(它写出的包含日志的日志文件大约为 12.2MB,大约有 30 000 条记录)?
注意:我已经更改了问题的标题和标签。
旧标题:如何强制缩小数据表和/或列表以释放内存?
老标签: list datatable c# .net memory