如何在C#应用程序(DataTable dispose)中保持内存清晰?
处理数据表并清除C#应用程序中所有相关RAM内存的最佳方法是什么 我有一个简单的代码:如何在C#应用程序(DataTable dispose)中保持内存清晰?,c#,visual-studio-2012,datatable,garbage-collection,dispose,C#,Visual Studio 2012,Datatable,Garbage Collection,Dispose,处理数据表并清除C#应用程序中所有相关RAM内存的最佳方法是什么 我有一个简单的代码: private void Form1_Load(object sender, EventArgs e) { using (DataTable vDT = new DataTable()) using (DataTable vDTsec = new DataTable()) { vDT.Columns.Add("A"); vDT.Columns.Add("
private void Form1_Load(object sender, EventArgs e)
{
using (DataTable vDT = new DataTable())
using (DataTable vDTsec = new DataTable())
{
vDT.Columns.Add("A");
vDT.Columns.Add("B");
vDT.Columns.Add("B_1");
vDTsec.Columns.Add("A");
vDTsec.Columns.Add("B");
vDTsec.Columns.Add("E");
for (int x = 1; x <= 1000000; x++)
{
vDT.Rows.Add(new object[] { x, "B" + x.ToString(), "C" + x.ToString() });
vDTsec.Rows.Add(new object[] { x, "B" + x.ToString(), "E" + x.ToString() });
}
vDT.Dispose();
vDTsec.Dispose();
}
GC.Collect();
GC.WaitForFullGCApproach(100);
GC.WaitForPendingFinalizers();
}
private void Form1\u加载(对象发送方,事件参数e)
{
使用(DataTable vDT=newdatatable())
使用(DataTable vDTsec=newdatatable())
{
vDT.列。添加(“A”);
vDT.列。添加(“B”);
vDT.列。添加(“B_1”);
vDTsec.Columns.添加(“A”);
vDTsec.列。添加(“B”);
vDTsec.Columns.添加(“E”);
首先,对于(int x=1;x,您不必担心在任务管理器中看到的数字。这意味着垃圾收集器尚未收集内存(或者操作系统正在缓存内存),如果操作系统不需要,GC可能会等待一段时间来收集内存
更好地控制内存使用的唯一令人信服的理由(除了合理的对象管理之外)在您的应用程序中,是为了提高程序的性能特征。您这样做的方式是使用,这基本上意味着,您不需要销毁和重新创建对象,而是只创建一次对象,然后重新使用它们,因此GC永远不会收集。但是,只有在您用尽了所有其他提高性能的技术之后,才可以使用它。您通常不应该自己调用垃圾收集。调用Dispose()并让GC完成它的工作。GC.Collect()尝试收集所有代。GC是或可能是昂贵的。大多数时候,它本身处理得很好,我们不需要直接参与
确保明确关闭和/或处置非托管对象(如DB连接)。如果要将这么多数据加载到内存中的数据表中,而您觉得有必要强制收集,您可能需要重新考虑您的方法。我很想了解您正在做的需要GC的事情。您是否正在摆脱内存异常?否?然后继续。内存管理最好留给CLR。它知道何时执行分配和释放内存。内存分配非常昂贵,因此运行时将保留内存,如果可能的话不会将其释放回系统。关闭任务管理器。它不适合您。通常,只需将对象设置为null
即可。如果涉及非托管资源,IDisposable
和使用
块比直接调用Dispose()
要好。感谢您的解释;然后,最好的方法是避免创建包含大量数据的对象。我将尝试优化代码并重用现有资源。