博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Net 应用程序如何在32位操作系统下申请超过2G的内存
阅读量:6700 次
发布时间:2019-06-25

本文共 1700 字,大约阅读时间需要 5 分钟。

作者: eaglet

2008 年我写过一篇博客叫 《》这篇博客主要讲述了如何在32位操作系统下利用AWE 扩展访问超过2G的内存。AWE方式虽然可以访问超过2G的内存,但其本身也有一些问题,首先必须要锁定内存,其次需要自己写内存管理程序来管理这些内存,.net framework 无法在AWE 扩展的内存中创建托管堆。其实很多应用只是想申请比2G稍多一些的内存,最简单的方法还是采用/3GB开关来实现。本文将讲述如何利用 /3GB开关来让32位操作系统下.net 应用程序申请超过2GB的内存。

 

首先简单说一下这个 /3GB 开关 (知道的可以不看)

默认情况下,Windows 可以对总计 4 千兆字节 (GB) 的虚拟地址空间进行寻址。默认情况下,此地址空间中的 2 GB 为内核(操作系统)保留,另外 2 GB 是为用户模式程序保留的。当你将 /3GB 开关放入操作系统的 Boot.ini 文件中时,你就重新分配了虚拟地址空间,给用户模式程序提供 3 GB 的空间,同时将内核限制为 1 GB。

设置办法:C:\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="????" /3GB

如下操作系统可以支持 /3GB 开关

Windows XP Professional

Windows Server 2003
Windows Server 2003, Enterprise Edition
Windows Server 2003, Datacenter Edition
Windows 2000 Advanced Server
Windows 2000 Datacenter Server
Windows NT Server 4.0, Enterprise Edition

Windows VISTA , Windows 7 和 Windows server 2008 也支持这个开关

 

详见

 

设置完后重新启动系统,这时应用程序就可以申请超过3G的内存了。一切好像到这里就该结束了,然而并非如此。

当我运行我在.net framework 下做的测试程序时,我发现3GB开关打开后,这个测试程序依然无法申请超过2G的内存,内存申请到1.5G以上时就无法再分配内存了。

查找资料后我发现,操作系统在支持/3GB参数后应用程序也要做相应的修改,告诉操作系统可以按照/3GB方式运行才行,我想这很可能是出于对应用程序兼容性方面的考虑。

为了告知操作系统这个应用程序可以支持/3GB方式,我们需要往exe 文件头中添加一个 IMAGE_FILE_LARGE_ADDRESS_AWARE 标志。添加的方式很简单:

在你的系统的 Program Files\Microsoft Visual Studio 8\VC\bin 目录下找到 editbin 这个可执行文件,在命令行下执行:

editbin /LARGEADDRESSAWARE yourapplication.exe 这里的yourapplication.exe 需要输入的是你的.net 应用程序的路径名加文件名。

执行了这条语句后,我再次运行测试程序,内存可以申请到 2.5G了,比2GB模式下多了1G内存可以使用。

 

最后多罗嗦一句,为什么.net 应用程序在 2GB 情况下只能申请最多 1.4-1.6 GB 的内存?

这是因为.net 的垃圾回收器在工作时需要拷贝 live objects,.net framework 需要为它保留一定空间的内存来完成这些拷贝工作。这也是为什么Microsoft 建议asp.net 应用程序内存分配的上限最好设置为800M的原因.

.net 应用程序如何优化性能,参见下面链接,大家有兴趣可以去看看,这里不再多说了,离主题有点远了。

转载地址:http://jiloo.baihongyu.com/

你可能感兴趣的文章
FSF 称 DRM 被用于锁定、控制和监视用户
查看>>
微软老兵 Antoine LeBlond 将正式离职
查看>>
《开源思索集》一Source Code + X
查看>>
《树莓派学习指南(基于Linux)》——1.4 将Raspbian烧录到SD卡
查看>>
《脱颖而出——成功网店经营之道》一2.6 连横:返利模式的应用及分销
查看>>
如约而至 Nexus 6 的 Android 7.1.1 已经上线
查看>>
阿里巴巴Dubbo实现的源码分析
查看>>
《Effective Debugging:软件和系统调试的66个有效方法》一第5条:在能够正常运作的系统与发生故障的系统之间寻找差别...
查看>>
《塑造互联网思维的企业》一一第4章 全球商务向社会化媒体的转变
查看>>
《简明电路分析》——导读
查看>>
[MySQL 5.6优化] --order by limit x,x 优化
查看>>
《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述
查看>>
《Adobe InDesign CS6中文版经典教程》—第1课1.5节修改文档的缩放比例
查看>>
《3ds Max疯狂设计学院》——1.6节3ds Max 2016新增的主要功能
查看>>
提升你的开发效率,10 个 NPM 使用技巧
查看>>
《Pro/ENGINEER野火版5.0从入门到精通》——2.5 设置零件单位
查看>>
《游戏视频主播手册》——2.2 哪些人适合做游戏主播
查看>>
《Windows PowerShell实战指南(第2版)》——1.4 搭建自己的实验环境
查看>>
《黑客秘笈——渗透测试实用指南》—第2章2.3节 外部或内部的主动式信息收集...
查看>>
3D打印技术在医疗领域能做些什么?帮助精确完成手术
查看>>