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

Chr*_*ber 6 c# memory visual-studio visual-studio-2015

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

使用x86平台标志编译C#控制台应用程序时,未设置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
Run Code Online (Sandbox Code Playgroud)

将标志设置为"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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

问题是:这在哪里记录?

Had*_*ais 4

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

这是在哪里记录的?

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

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

不管所有这些问题和答案如何,只有在针对 x86 时才需要这样做。

  • 将 Prefer 32 位设置为默认值是在 VS2012 中完成的。仅从 VS2015 开始,才使其还设置 LARGE ADDRESS AWARE 标志。 (2认同)