Excel XLL插件可以拥有多少内存?

时间:2016-12-08 10:57:27

标签: c++ excel memory xll xlw

我正在使用C ++在XLW library的帮助下为Microsoft Excel编写.XLL插件。我的操作系统是Windows 7 64位版本,带有32 GB RAM;但我的Excel是Excel 2010,32位版本。

使用GlobalMemoryStatusEx进行检查,它显示XLL中的代码只能看到大约1200 MB可用虚拟内存(来自struct _MEMORYSTATUSEX中的ullAvailVirtual),尽管可用的物理内存({{ 1}})约为23 GB。

由于我的代码需要相当多的内存(每个计算线程约100MB),在发出12个线程后会遇到错误的分配错误。

有没有办法增加可用内存?

  1. 这是Excel ullAvailPhys插件的限制吗?在控制台应用程序中,XLL报告可用的大约2034 MB虚拟内存。
  2. 这是GlobalMemoryStatusEx的限制吗?
  3. 这是XLW library的限制吗?

1 个答案:

答案 0 :(得分:1)

XLL实际上只是一个重命名的DLL。如果你有一个32位的Excel,那么整个Excel进程都有一个32位的虚拟地址空间(Windows保留了OS的一半)。因此,您的流程(XLL和Excel本身)仅限于2G。

您的选择是:

  1. 切换到64位Excel(这意味着您的XLL需要为64位)
  2. 让XLL保持32位,并使其启动一个单独的(可能是64位)进程,然后进行处理。
  3. 后一个选项显然要复杂得多,在进程之间复制数据不会那么快 - 但 是一个选项。