2017-10-16 85 views
2

使用Invantive Control(VSTO加载项与Microsoft .NET 4.7)的复杂查询将从Exact Online中检索大约200.000行。这适用于64位版本的Microsoft Excel 2010及更新版本。itgenclr007:使用VSTO加载项修复32位Excel中的OutOfMemory

在查询结束时强制.NET垃圾收集报告大约有250 MB内存正在使用之后。在此过程中,正在使用的内存会发生变化,但会看到750 MB的内存峰值。

但是,在32位版本中,用户在下载数据时经常会遇到OutOfMemory异常。即使在重构查询以尽早摆脱未使用的列和行之后,它仍然不适合可用内存。

如何在Excel 32位版本中运行如此复杂的查询?

回答

5

尽管Excel 2007至少有64位版本的Excel可用,但安装的主要依然是Microsoft Excel的32位版本。

大多数插件开发人员从来没有找到证明支持64位Microsoft Office的商业案例,并且在2010年左右的时间里,Microsoft更改了将64位版本的Office应用到32位版本的建议。

VSTO加载项的可用内存因版本而异,但随着Excel本身复杂性的增加而下降。

目前,具有1.75 GB的可寻址内存空间,无论是Excel还是.NET CLR加载,您最多可以使用大约250-300 MB的.NET代码和数据。垃圾收集器在将所有内容都放入可寻址内存空间方面做得非常好,但通常情况下这是不够的。

通过使用64位Windows版本(现在的普通版本)并向Windows添加更多物理或虚拟内存,可用内存和可寻址内存的数量一般不会得到改善。这是32位地址空间设计的限制。

从2016年5月发布开始,Microsoft已在Excel.exe的标头中设置LARGEADDRESSAWARE位。这允许32位版本的Excel就像旧版32位版本的Oracle和其他版本一样,以解决超过2 GB的内存问题。

knowledge base更多文档提供该设施的版本。鉴于Excel 2013已经停止,本质上,您应该使用32位新版本的Excel 2016来避免OutOfMemory异常。

对于Office365订户,建议切换到包含足够新的Excel 2016

虽然为Excel这增加了可寻址存储器空间到仅3 GB版中的一个信道,它增加的存储量可用于您的.NET代码和数据作为从250-300 MB到1250-1300 MB的VSTO。令人惊讶的因素4-5增加了可用内存空间。

Invantive Control在帮助 - >诊断窗口中显示可寻址的内存空间。

的Excel非LARGEADDRESSAWARE版本中,它表明:

2 GB limited Excel

但LARGEADDRESSAWARE版本中,它表明:

Excel with 3 GB addressable

在行动拨出超过2 GB:

32-bit Excel with over 2 GB for .NET allocated

相关问题