2014-03-13 82 views
0

伙计们我试图一次在C#winforms中加载200万行,但我得到System.OutOfMemoryException。现在我的系统有4 GB RAM(core2duo 2.4ghz),加载DataGridView(通过任务管理器观察)时系统内存消耗达到最大67%,应用程序抛出此异常。DataGridView内存不足?

这是为什么?不能DataGridView一次处理200万行?或者是我的个人电脑没有能力?

P.S.我只是用这个测试目的,我知道分页,所以请不要问我为什么我试图一次加载所有的行。

DataGridView生成测试行代码: -

DataTable dt = new DataTable(); 
for (int i = 0; i < 10; i++) 
{ 
    dt.Columns.Add(i.ToString()); 
} 
for (int j = 0; j < 2000000; j++) 
{ 
    DataRow row = dt.NewRow(); 
    for (int k = 0; k < 10; k++) 
    { 
     row[k] = Guid.NewGuid().ToString(); 
    } 
    dt.Rows.Add(row); 
} 
dataGridView1.DataSource = dt; 
+0

这可能是你感兴趣的:http://programmers.stackexchange.com/questions/155892/practical-size-limits-of-a-datatable-in-c –

+0

@ user3331470那么我最近发现自己把9000将一行代码放到一个DataGridView中,用于我正在制作的一个Mercurial diff工具,并发现性能很糟糕。所以我[虚拟化](http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.virtualmode(v = vs.110).aspx)它。也许考虑这样做。我还会回顾一下,如果你可以在没有'DataTable'的情况下做到这一点,那么可以使用一个简单的'List '而不是? –

+0

在VS12中运行性能分析时,我得到了这个似乎是原因的错误: DA0018:(最大)所有堆中的#字节数= 1,643,798,088.00;托管内存分配接近32位进程的默认限制。你的应用程序可能是内存限制的。 – NewbieProgrammer

回答

1

这是因为32位应用程序被限制在大约1.6 gb的RAM,所以如果你的DataGridView消耗更多,那么你的应用程序肯定会崩溃。

0

你存储的GUID为您的数据表,这使得它们相当大的弦......我想如果你将创建GUID列,你不会得到陷入困境...