2017-10-16 63 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

相關問題