gpt4 book ai didi

vb.net - .NET & CreateObject,COM对象使用谁的内存?

转载 作者:行者123 更新时间:2023-12-02 23:02:11 26 4
gpt4 key购买 nike

我有一个 VB.NET 应用程序,它使用 CreateObject 来使用 Excel 并将大量数据转储到其中。我们遇到了内存不足的异常,此时我们的应用程序通常会达到 1GB 内存。但我无法将所有数字相加。

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

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

应用程序屏幕上的数据(数据网格)大约为 400mb,当它崩溃时,它额外使用了 600mb,尽管带有 CSV 的 Excel 只有 200mb,而 CSV 只有 68mb。我意识到内存中的数组可能会更大一些,但是除非 Excel 以某种方式使用我的应用程序内存,否则 600mb 的数据如何被吞噬到将数据传递到 Excel 中?

我试图通过 CreateObject 找出 Excel 是否在其自己的内存空间中运行或使用我的应用程序内存空间,结果完全空白。 ProcessExplorer 将它们显示为单独的进程,因此我不知道该怎么想。

我们发现以 64 位而不是 32 位运行应用程序可以解决问题,但并非所有客户都会使用 64 位 Office。

所以我的问题是:这一行如何使用 600mb,是否有更好的方法将数据传递到 Excel。

最佳答案

我敢打赌,这也需要一些时间来运行 1 条线,970 万个单元!?但无论如何,有两个问题:

1:这一行怎么能使用600mb(我假设你的意思是MB(字节),而不是mb(位))

我想你用 970 万个细胞回答了这个问题。每个单元只有 61 字节。我假设你有一些字符串。每个字符串使用几个字节,加上单元格中每个字符的 2 个字节。带小数点的数字,占用 16 个字节。更不用说,数组有一定的大小来处理它的信息。请参阅此图表,了解数据在 VB 中所占的位置。 2012 VB Data Types我刚刚了解到的一件令人惊奇的事情是,因为我已经很久没有查看此图表了,通过使用 64 位操作系统,它实际上应该占用更多内存。幸运的是,64 位可以处理更多。

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

您可以尝试使用 OLEDB ACE 驱动程序来处理您的 Excel 文件。它速度更快,并且不需要在计算机上安装 EXCEL,这是一大优点。

How To Use ADO.NET to Retrieve and Modify Records in an Excel Workbook With Visual Basic .NET

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

关于vb.net - .NET & CreateObject,COM对象使用谁的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com