.NET:LARGEADDRESSAWARE无效

时间:2017-12-20 18:39:37

标签: .net

我想使用超过1.2 GB的RAM。

所以我尝试了editbin / LAGEADRESSAWARE命令。

该命令执行时没有错误,但我仍然在1.2 gb时出现内存异常。

现在我问自己:我的项目中有几个exe文件。必须处理哪个exe文件:

a)所有exe文件 b)入口组件[1] c)执行程序集[1]

[1]:System.Reflection.Assembly.GetEntryAssembly / GetExecutingAssembly中定义的术语输入/执行

我试过b)和c)并没有效果。

editbin的输出只是:

2 - ; Microsoft(R)COFF / PE编辑器版本11.00.61030.0 2 - ;版权所有(C)Microsoft Corporation。保留所有权利。

这是正确的输出吗?

3 个答案:

答案 0 :(得分:1)

要确保它有效,您需要使用与editbin位于同一文件夹中的dumpbin。它显示有关公共对象文件格式(COFF)二进制文件的信息。当/ largeaddressaware启用时,我们可以看到额外的标题“应用程序可以处理大(> 2GB)地址

               14C machine(x86)
                 3 number of sections
          5AB8D688 time date stamp Mon Mar 26 13:16:24 2018
                 0 file pointer to symbol table
                 0 number of symbols
                E0 size of optional header
               122 characteristics
                     Executable
                     Application can handle large(>2GB) addresses
                     32 bit word machine

如果未启用(默认):

  FILE HEADER VALUES
               14C machine(x86)
                 3 number of sections
          5AB8D734 time date stamp Mon Mar 26 13:19:16 2018
                 0 file pointer to symbol table
                 0 number of symbols
                E0 size of optional header
               102 characteristics
                     Executable
                     32 bit word machine

来自cmd:

>“C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ bin \ dumpbin”/ headers C:\ MyFile.exe

来自VS post-buid事件:

调用“$(DevEnvDir).. \ tools \ vsvars32.bat”
editbin / largeaddressaware“$(TargetPath)”
dumpbin / headers“$(TargetPath)”

如果会出现一些错误,请使用您的环境verion direclty:

拨打“$(VS100COMNTOOLS).. \ tools \ vsvars32.bat”// for vs 2012.

拨打“$(VS120COMNTOOLS).. \ tools \ vsvars32.bat”// for vs 2013.

或条件:

IF  EXIST  "%VS100COMNTOOLS%"  CALL  "%VS100COMNTOOLS%vsvars32.bat" 
IF  EXIST  "%VS110COMNTOOLS%"  CALL  "%VS110COMNTOOLS%vsvars32.bat" 
IF  EXIST  "%VS120COMNTOOLS%"  CALL  "%VS120COMNTOOLS%vsvars32.bat" 
IF  EXIST  "%VS140COMNTOOLS%"  CALL  "%VS140COMNTOOLS%vsvars32.bat" 
IF  EXIST  "%VS150COMNTOOLS%"  CALL  "%VS150COMNTOOLS%vsvars32.bat"  

(更新)VS 2017:

call "%vsappiddir%..\tools\vsdevcmd.bat"

答案 1 :(得分:0)

您尝试分配单个字节数组以确定可分配的内存量。单个阵列限制为2 ^ 30个元素。 / LARGEADDRESSAWARE没有改变它。

尝试分配100mb阵列列表。

答案 2 :(得分:0)

我重新打开了这个问题。完全回答我的问题

1)它不适用于x86。我现在改变所有项目以使用'any cpu'。在设置项目时,我遇到了一些2.0第三方库的问题,但这似乎现在有效,可能还有一个新的框架版本(4.5)。所以我现在可以切换到“任何cpu”。

2)看来,只有条目程序集必须用editbin编辑。

3)必须禁用项目设置“32 Bit bevorzugen”。

4)必须停用Visual Studio主机进程。

5)实际上对于大多数项目来说,仅仅进行设置是不够的。我需要打开“32位bevorzugen”,重新编译,再次关闭,重新编译然后它神奇地工作。似乎VS 2012的构建过程中存在一些零星的问题我使用..