Сколько памяти может иметь плагин Excel XLL?
Я использую C++ для написания плагина.XLL для Microsoft Excel с помощью библиотеки XLW. Моя операционная система Windows 7 64-разрядная версия, с 32 ГБ ОЗУ; но мой Excel это Excel 2010, 32-битная версия.
Проверка с помощью GlobalMemoryStatusEx показывает, что код в XLL может видеть только около 1200 МБ доступной виртуальной памяти (из ullAvailVirtual
в структуре _MEMORYSTATUSEX), хотя физическая память доступна (ullAvailPhys
) составляет около 23 ГБ.
Поскольку моему коду требуется довольно много памяти (около 100 МБ на вычислительный поток), после выдачи 12 потоков возникает ошибка неправильного распределения.
Есть ли способ увеличить объем доступной памяти?
- Это ограничение Excel
XLL
плагин? В консольном приложенииGlobalMemoryStatusEx
сообщает около 2034 МБ виртуальной памяти доступно. - Это ограничение
XLW library
? - Это ограничение
32-bit Excel
?
1 ответ
XLL на самом деле просто переименованная DLL. Если у вас 32-разрядный Excel, то весь процесс Excel имеет 32-разрядное виртуальное адресное пространство для хранения (и Windows резервирует половину этого пространства для ОС). Таким образом, ваш процесс (как XLL, так и сам Excel) ограничен в общей сложности 2G.
Ваш выбор:
- Переключитесь на 64-битный Excel (это означает, что ваш XLL должен быть 64-битным)
- Пусть XLL остается 32-разрядным, и заставляет его запускать отдельный (возможно, 64-разрядный) процесс, и выполняет обработку в этом.
Последний вариант, очевидно, намного сложнее, и копирование данных между процессами не будет таким быстрым, но это вариант.