.NET和CreateObject,它的内存COM对象使用?

我有一个VB.NET应用程序使用CreateObject来使用Excel并将大量数据转储到其中。 我们正在摆脱内存exception,我们的应用程序在这一点上通常打1GB的内存。 不过,我不能把所有的数字加起来。

这就是数据传递给Excel的方式:

worksheet_object.Range("A1").Resize(rows, cols).Value = an_array 

该应用程序是在屏幕上的数据(数据网格)400MB左右,当它崩溃时,已经使用了额外的600MB,尽pipeExcel的CSV只有200MB,CSV只有68MB。 我意识到在内存数组可能会有所增加,但600MB如何得到吞噬将数据传递给Excel,除非Excel以某种方式使用我的应用程序内存?

我试图找出,如果Excel通过CreateObject运行在自己的内存空间或使用我的应用程序内存空间,绘制一个完整的空白。 ProcessExplorer将它们显示为单独的进程,所以我不知道该怎么想。

我们发现运行的应用程序为64位,而不是32解决了这个问题,但并不是所有的客户将有64位的办公室。

所以我的问题是:这一行怎么可以使用600MB,有没有更好的方法将数据传递给Excel。

我敢打赌,这需要一些时间来运行1线,9.7M的细胞!? 但无论如何,2个问题:

1:那一行如何使用600mb(我假设你是指MB(Byte),而不是mb(bit))

我想你是用9.7M的电池来回答的。 那只有每个单元6​​1字节。 我会假设你有一些string。 每个string使用一个字节,加上单元格中每个字符的2个字节。 带小数点的数字,它们占用16个字节..期间。 更何况,数组有一定的规模,来处理它的信息。 看到这个图表,了解数据在VB中占用的概念。 2012年的VB数据types我刚才学到的一件了不起的事情,因为我没有看这个图表很长时间,是通过去64位的操作系统,它应该已经占用了更多的内存。 幸运的是,64位可以处理更多。

2:有没有更好的方法将数据传递给Excel。

您可以尝试使用OLEDB ACE驱动程序来处理您的Excel文件。 它速度更快,不需要在计算机上安装EXCEL,在那里有很大的优势。

如何使用ADO.NET使用Visual Basic .NET检索和修改Excel工作簿中的logging

这篇文章是旧的,但仍然相关,非常有帮助。 对于较新版本的Excel的连接string,请尝试ConnectionStrings.com