我正在创建一个需要使用大量RAM的.NET应用程序(C#).我最近知道在32位版本的Windows XP上我只能使用2 GB,除非我使用/3Gb
交换机,并IMAGE_FILE_LARGE_ADDRESS_AWARE
在可执行标头中设置标志.但是因为我正在开发.NET应用程序,我想我无法直接修改可执行文件,是吗?那么,我该怎么做才能让我的应用程序使用3 GB?
.NET exe仍然是标准的PE文件; 因此您可以尝试使用editbin /LARGEADDRESSAWARE
设置标志,但请注意,如果您使用的是ClickOnce(因为它维护文件的加密哈希),这将不起作用.
但是,请注意,就单个对象/数组的最大大小而言,您仍将具有相同的.NET限制.对于大量内存,x64是一个更好的主意.
/ 3GB开关在OS引导加载程序上,而不在您的应用程序上.(编辑:它也存在于本机C/C++编译器中,但不存在于C#编译器中)就您的应用而言,它将请求内存,操作系统会将其提供给您的进程.但是,在程序使用虚拟内存之前,您可以再访问1个gig(可能,您并不总是获得3gig,具体取决于您的硬件外围设备).
正如Marc Gavell向我指出的那样,您可能需要在exe上运行命令"editbin/LARGEADDRESSAWARE my.exe"作为post build选项来启用它.在这里找到了一个MS人员的参考:MS Forums
我建议你看看你的程序,看看你是否可以重新架构它以减少使用内存.也许你可以用较小的块来处理数据集,而不是试图将整个东西一次性加载到内存中?