C# .Net 下 x86使用大内存的处理

/LARGEADDRESSAWARE 选项通知连接器应用程序可处理大于 2 GB 的地址。 在 64 位编译器中,默认状况下启用此选项。 在 32 位编译器中,若是未在连接器行上指定 /LARGEADDRESSAWARE,则将启用 /LARGEADDRESSAWARE:NO。windows

若是用 /LARGEADDRESSAWARE 来连接应用程序,则 DUMPBIN /HEADERS 将显示该效果的信息。app

在 Visual Studio 开发环境中设置此连接器选项

  1. 打开该项目的“属性页”对话框。 有关详细信息,请参见设置 Visual C++ 项目属性ui

  2. 单击“连接器”文件夹。this

  3. 单击“系统”属性页。spa

  4. 修改“启用大地址”属性。.net

 

不须要largeaddressaware全部windows程序就都能用到2g内存,2g以上才须要largeaddressaware,在2g之内若是你的程序在分配大内存时报outofmemory exception,通常来讲有如下几种状况:调试


1.可用内存不够
2.你在vs2005中用调式方式启动程序,而且在项目属性的调式选项里你启用了vs2005自带宿主方式调试。vs2005自带的调试宿主环境彷佛只提供1g内存的地址空间。
3.使用了动态调整的集合对象但未指定Capacity。如ArrayList,Hashtable等。当在须要请求大内存的状况下使用动态调整的集合对象必须强制Capacity上限,由于集合动态调整Capacity所须要的内存数是Count数的3倍。假如你空闲2g内存,使用ArrayList时未指定Capacity,capacity是采用翻倍增加策略的,当Capacity用到1g的时候再添加元素.net会请求2g空间,这样在把全部元素copy到新的内存前总共开销要3g内存.orm

相关文章
相关标签/搜索