zoukankan      html  css  js  c++  java
  • C# .Net 下 x86使用大内存的处理

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

    如果用 /LARGEADDRESSAWARE 来链接应用程序,则 DUMPBIN /HEADERS 将显示该效果的信息。

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

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

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

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

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

    不需要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内存.

  • 相关阅读:
    Lookup注解
    解决数据量大,分页查询慢的方案
    一个http的请求分析
    MYSQL
    什么是性能优化
    编码规范随笔
    装饰者模式
    单例模式
    J.U.C并发包(1)
    Java内存模型
  • 原文地址:https://www.cnblogs.com/xidongs/p/3806378.html
Copyright © 2011-2022 走看看