2017-10-16 2 views
2

Eine komplexe Abfrage mit Invantive Control (VSTO-Add-In mit Microsoft .NET 4.7) ruft ca. 200.000 Zeilen von Exact Online ab. Dies funktioniert in 64-Bit-Versionen von Microsoft Excel 2010 und neuer.itgenclr007: Fix OutOfMemory in 32-Bit-Excel mit VSTO-Add-In

Nach einer erzwungenen .NET-Speicherbereinigung am Ende der Abfrage meldet, dass ca. 250 MB Speicher belegt sind. Während des Vorgangs variiert der verwendete Speicher, erkennt jedoch Spitzen von 750 MB Speicher.

Bei 32-Bit-Versionen erhalten Benutzer jedoch häufig eine OutOfMemory-Ausnahme während des Herunterladens von Daten. Selbst nach dem Refactoring der Abfrage, um nicht verwendete Spalten und Zeilen so früh wie möglich loszuwerden, passt sie immer noch nicht in den verfügbaren Speicher.

Wie kann ich eine solche komplexe Abfrage in Excel 32-Bit-Versionen ausführen?

Antwort

5

Obwohl 64-Bit-Versionen von Excel mindestens seit Excel 2007 verfügbar sind, ist die Hauptkomponente der Installationen immer noch eine 32-Bit-Version von Microsoft Excel.

Die meisten Add-In-Entwickler haben noch nie einen Geschäftsfall gefunden, der die Unterstützung für 64-Bit-Microsoft Office rechtfertigt. Microsoft hat im Laufe des Jahres 2010 seine Empfehlungen zur Verwendung von 64-Bit-Versionen von Office auf 32-Bit-Versionen geändert.

Der verfügbare Speicher für VSTO-Add-Ins variiert je nach Version, nimmt jedoch mit zunehmender Komplexität von Excel selbst ab.

Derzeit, mit 1,75 GB adressierbarem Speicherplatz, sowohl Excel und die .NET CLR geladen, können Sie maximal 250-300 MB für Ihren .NET-Code und Daten maximal verwenden. Der Garbage Collector erledigt die Aufgabe, alles in den adressierbaren Speicherbereich einzupassen, aber das reicht oft nicht aus.

Die Menge an verfügbarem und adressierbarem Speicher wird im Allgemeinen nicht durch die Verwendung einer 64-Bit-Windows-Version (die heute übliche Version) verbessert, und Windows wird mehr physischen oder virtuellen Speicher hinzugefügt. Dies ist eine Einschränkung des 32-Bit-Adressraumentwurfs.

Ab den Versionen von Mai 2016 hat Microsoft das Bit LARGEADDRESSAWARE in der Kopfzeile von Excel.exe festgelegt. Dies ermöglicht 32-Bit-Version von Excel genau wie zu alten 32-Bit-Versionen von Oracle und andere, um mehr als 2 GB Speicher zu adressieren.

Die knowledge base dokumentiert weiter, welche Versionen diese Möglichkeit bieten. Da Excel 2013 eingestellt wurde, sollten Sie im Wesentlichen eine neue Version von Excel 2016 in 32-Bit verwenden, um eine OutOfMemory-Ausnahme zu vermeiden.

Für Office365 Abonnenten, ist es empfehlenswert, einen Kanal zu wechseln, der 2016.

Obwohl für Excel dies erhöht den adressierbaren Speicherraum auf nur 3 GB, erhöht sich die Menge an Speicher, eine ausreichend aktuelle Version von Excel enthält Verfügbar für Ihren .NET-Code und Daten als VSTO von 250-300 MB bis 1250-1300 MB. Ein erstaunlicher Faktor 4-5 Erhöhung des verfügbaren Speicherplatzes.

Invantive Control zeigt den adressierbaren Speicherplatz im Fenster Hilfe -> Diagnose an.

Für Nicht-LARGEADDRESSAWARE Versionen von Excel es zeigt:

2 GB limited Excel

Aber für LARGEADDRESSAWARE Versionen es zeigt:

Excel with 3 GB addressable

In Aktion mit mehr als 2 GB zugewiesen:

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