2016-12-08 13 views
0

Я использую C++ для создания плагина .XLL для Microsoft Excel с помощью XLW library. Моя операционная система - 64-разрядная версия Windows 7 с 32 ГБ оперативной памяти; но мой Excel - это Excel 2010, 32-битная версия.Сколько памяти может иметь плагин Excel XLL?

Проверка с помощью GlobalMemoryStatusEx, это показывает, что код в XLL могут видеть только около 1200 МБ виртуальной памяти доступно (от ullAvailVirtual в struct _MEMORYSTATUSEX), несмотря на то, доступной физической памяти (ullAvailPhys) составляет около 23 ГБ.

Поскольку мой код требует довольно много памяти (около 100 Мбайт на поток вычислений), после выдачи 12 потоков он попадает в плохую ошибку распределения.

Есть ли способ увеличить доступную память?

  1. Это ограничение Excel XLL плагин? В консольном приложении GlobalMemoryStatusEx сообщает около 2034 МБ виртуальной памяти.
  2. Это ограничение XLW library?
  3. Это ограничение 32-bit Excel?

ответ

1

XLL на самом деле просто переименованная DLL. Если у вас 32-разрядный Excel, то весь процесс Excel имеет 32-разрядное виртуальное адресное пространство для жизни (и Windows резервирует половину того, что для ОС). Таким образом, ваш процесс (как XLL, так и сам Excel) ограничен общим количеством 2G.

Ваш выбор:

  1. Переключение на 64-битной Excel (что означает, что ваш XLL должны быть 64-бит)
  2. Пусть XLL остаются 32-бит, и сделать его запуск отдельный (возможно, 64-разрядный) процесс и обрабатывать в этом.

Последний вариант, очевидно, гораздо сложнее, и копирование данных между процессами не будет, что быстро - но это является вариант.

+0

Вы имеете в виду, что мой 'A.XLL' по-прежнему является 32-разрядной DLL, но он выполняет отдельный (возможно, 64-разрядный) процесс' B.exe' и имеет 32-битный Excel' - '32-бит A.XLL' -' 64-битная связь B.exe'? – athos

+0

@athos: Да, именно это. –

+0

Если да, то как мог 'A.XLL' эффективно разговаривать с' B.exe'? Скорость - моя забота. – athos

 Смежные вопросы

  • Нет связанных вопросов^_^