7

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

使用 x86 平台标志编译 C# 控制台应用程序时,未设置大地址感知标志:

输出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 是大地址感知的:

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 内存

问题是:这在哪里记录?

4

1 回答 1

4

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

这是在哪里记录的?

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

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

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

于 2016-01-22T11:59:43.557 回答