我想使用超过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。保留所有权利。
这是正确的输出吗?
答案 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
>“C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ bin \ dumpbin”/ headers C:\ MyFile.exe
调用“$(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的构建过程中存在一些零星的问题我使用..