[Excel] Export do XLSX - Chyba: Out of memory

PříspěvekNapsal: 25.05.2012 09:32
od jiri.dolezal
Při exportu pomocí funkcionality MS Excel 2007 XLSX, resp. při exportech do MS Excel obecně ... se můžete setkat s chybovou hláškou:

Out of memory

Znamená to, že velikost generovaného XLSX souboru (v jeho nekomprimované XML podobě) překročila limit využitelného objemu RAM (tj. 2 GB). Helios Orange jako aplikace s 32-bitovou architekturou je v rámci paměťového managementu Windows schopna pracovat max. s 2GB RAM. Velikost generovaného souboru tedy překročila 2GB, nehledě na zbývající volnou kapacitu RAM stanice.

Export do XLSX systémově funguje tak, že celý probíhá v RAM stanice, která export iniciuje. Formát XLSX je velmi náročný na RAM.

Řešení:
- Exportovat por menších částech (menší počet označených řádků)
- Zjednodušit sestavu (odebrat zbytečné sloupce a tím zmenšit objem dat exportovaných do souboru)

Out of memory - doplnění

PříspěvekNapsal: 17.02.2017 15:46
od jan.sindelar
Přidávám drobné doplnění (dotazy a různé nejasnosti se množí).

Popisovaný problém se týká všech paměťově náročných operací, které probíhají v RAM dané stanice. Jde tedy například i o práci s kontingenčními tabulkami, načtení přehledu s velkým množstvím dat (kompletní účetní deník za několik let, miliony řádků...) atd.

Fyzický limit RAM u 32-bitového operačního systému jsou 4 GB (pokud je fyzicky nainstalováno víc, systém vše co je nad 4 GB nevidí, takže to nemá žádný význam). ALE..Druhá věc je limit jednoho dílčího procesu (tedy i Helios.exe) – ten je standardně ve 32-bitových Windows omezen právě na 2 GB na jeden proces (řeč je pouze o Windows, v jiných OS - např. Linuxu - může být situace jiná). Pomocí specifického příznaku při překladu aplikace (IMAGE_FILE_LARGE_ADDRESS_AWARE) se dá sice dostat teoreticky až na 3 GB, nicméně tato vlastnost má jistá omezení (kompatibilita, ne vždy funguje atd.), takže ji Helios nepoužívá.

Stejná situace nastává, pokud je Helios jako 32-bitová aplikace spuštěn na 64-bitovém systému. Systém jako takový je sice schopen pracovat s výrazně větším množstvím RAM (limitem je pak spíš umělá hranice určená příslušnou edicí Windows než fyzický limit, ale bavíme se o terabajtech), nicméně pro 32-bitový proces se nic nemění ani v 64-bitovém prostředí. Je nadále limitován standardně 2 GB (i když pomocí již zmiňovaného příznaku při překladu se opět dá dostat výš, rozhodně ale nikdy ne přes 4 GB).

Nijak tedy nepomůže, když je Helios spuštěn na serveru se 128 GB RAM, protože i tak využije jen 2 GB a příslušná akce může paradoxně přesto skončit na "Out of memory". Paměť ale v tomto případě nedošla systému, ale pouze danému procesu!

Uvedený problém příliš řešení nemá, dokud nebude i Helios kompletně 64-bitový. U paměťově náročných operací je zkrátka jediná možnost omezit množství zpracovávaných dat. V případě přehledu např. omezit množství zobrazených sloupců / zapnout omezené načítání dat. V případě Exportu do Excelu exportovat po částech apod.

Další informace o paměťových limitech Windows: https://msdn.microsoft.com/en-us/library/aa366778.aspx