32位系统如何在2G和3G间找到平衡点
我们知道32位系统下,用户态程序只能访问2G的内存,特别是.NET程序在这种情况下,内存一旦超过1.2G后,就很容易出OutofMemeryException异常,有一个选择就是为打开3G开关,那么我们的程序理论上就可以找访问到3G的内存,但是由于32系统寻址的限制,最多4G内存地址,如果打开3G开关,那么留给操作系统内核的的寻址空间之只有1G了。这其实是比较危险的,比较容易出一下莫名其妙的错误。那么怎么在这之间寻找一个平衡点呢。
修改boot.INI如如下内容:
[Boot Loader]
Timeout=30
Default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
[Operating Systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows Server 2003" /fastdetect /3GB /Userva=2900
特别需要注意的
The /userva=xxxx switch is designed to allow for more precise tuning of User-mode address space for program manufacturers who require more than 2 GB of User-mode space but do not require all the space that is provided by the /3GB tuning switch alone.
这样一来,用户态程序就只会使用2900M,通过userva开关来寻求一个平衡点。
当然遇到这种问题最好的解决方案采用64位操作系统。
参考:http://support.microsoft.com/kb/316739/en-us
修改boot.INI如如下内容:
[Boot Loader]
Timeout=30
Default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
[Operating Systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows Server 2003" /fastdetect /3GB /Userva=2900
特别需要注意的
The /userva=xxxx switch is designed to allow for more precise tuning of User-mode address space for program manufacturers who require more than 2 GB of User-mode space but do not require all the space that is provided by the /3GB tuning switch alone.
这样一来,用户态程序就只会使用2900M,通过userva开关来寻求一个平衡点。
当然遇到这种问题最好的解决方案采用64位操作系统。
参考:http://support.microsoft.com/kb/316739/en-us