使用任何CPU集编译C#应用程序可以处理大(> 2GB)地址

我在性能测试期间遇到了这个问题。

使用x86 platform标志编译C#Console应用程序时,未设置Large Address Aware标志:

dumpbin / headers app.exe的输出:

Dump of file app.exe PE signature found File Type: EXECUTABLE IMAGE FILE HEADER VALUES 14C machine (x86) 3 number of sections 569F0089 time date stamp Tue Jan 19 21:35:37 2016 0 file pointer to symbol table 0 number of symbols E0 size of optional header 102 characteristics Executable 32 bit word machine 

将标志设置为“Any Cpu”时,生成的exe是Large Address Aware:

 Dump of file app.exe PE signature found File Type: EXECUTABLE IMAGE FILE HEADER VALUES 14C machine (x86) 3 number of sections 569F01D7 time date stamp Tue Jan 19 21:41:11 2016 0 file pointer to symbol table 0 number of symbols E0 size of optional header 22 characteristics Executable Application can handle large (>2GB) addresses 

请注意,“应用程序可以处理大(> 2GB)地址”标志已设置。

我找不到关于这个主题的任何文件。 所有其他堆栈溢出问题建议您必须手动执行此操作:

如何在C#源代码中启用IMAGE_FILE_LARGE_ADDRESS_AWARE?

我可以在Visual Studio中设置LARGEADDRESSAWARE吗?

在32位应用程序中使用3Gb内存

问题是:这在哪里记录?

AnyCPU的目的是能够在x86和x64平台上运行托管代码,同时利用x64平台的更大地址空间。 唯一的方法是在定位AnyCPU时将二进制标记为大地址识别。 此外,如果不是这种情况,那么将Prefer 32位设为默认值是不合适的。

这记录在哪里?

这是暗示的,没有明确记录。

所有其他堆栈溢出问题建议您必须手动执行此操作

无论所有这些问题和答案如何,只有在定位x86时才需要这样做。