如何突破.NET内存限制?
2009-01-05 10:51
330 查看
我们现在的一个.NET应用程序需要用到2G左右的内存,当我们将这个程序放到有4G内存的服务器上运行时,就会抛出OutOfMemory异常。
为了搞清楚抛出异常的原因,我写了个用于申请内存的测试程序,每次申请100M。运行这个测试程序,发现每次申请到1.2G时就会抛出OutOfMemory异常。
我在网上找到了一篇文章,告诉如何突破1.2G内存:http://www.xker.com/page/e2007/0116/12771.html 其中的重点摘抄如下:
(1)在boot.ini文件中增加/3GB的开关。
[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
(2)在命令行窗口,进入该目录,如 cd "C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin"
(3)运行link命令: link -edit -LARGEADDRESSAWARE server.exe (server.exe为你的.Net程序)
(4)你的server.exe就可以使用到2.4G内存了
按照文章所示的方法,我进行了试验,但是还是行不通,每次到1.2G就抛OutOfMemory异常。仔细看看那篇文章,作者使用的是.NET 1.1,而我们的程序是基于.NET 2.0的,有可能是这个方法对2.0不适用吧。
不知道大家有碰到过类似的问题没有?有解决方案的请留言告诉一下,非常谢谢。
2009.01.06:最简单的方案就是大家建议的升级到64位,搞定噻,呵呵。
(1)在服务器上装64位的OS
(2)在服务器上装64位的.NET Framework
(3)应用程序不用重新编译,直接运行即可,JIT会自动生成针对64位的机器码。但如果你的应用程序中包含了下列因素,可能会出问题:浮点比较运算、二进制序列化、PInvoke等。
(4)如果应用程序有加密,要改用64位的加密工具:)
为了搞清楚抛出异常的原因,我写了个用于申请内存的测试程序,每次申请100M。运行这个测试程序,发现每次申请到1.2G时就会抛出OutOfMemory异常。
我在网上找到了一篇文章,告诉如何突破1.2G内存:http://www.xker.com/page/e2007/0116/12771.html 其中的重点摘抄如下:
(1)在boot.ini文件中增加/3GB的开关。
[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
(2)在命令行窗口,进入该目录,如 cd "C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin"
(3)运行link命令: link -edit -LARGEADDRESSAWARE server.exe (server.exe为你的.Net程序)
(4)你的server.exe就可以使用到2.4G内存了
按照文章所示的方法,我进行了试验,但是还是行不通,每次到1.2G就抛OutOfMemory异常。仔细看看那篇文章,作者使用的是.NET 1.1,而我们的程序是基于.NET 2.0的,有可能是这个方法对2.0不适用吧。
不知道大家有碰到过类似的问题没有?有解决方案的请留言告诉一下,非常谢谢。
2009.01.06:最简单的方案就是大家建议的升级到64位,搞定噻,呵呵。
(1)在服务器上装64位的OS
(2)在服务器上装64位的.NET Framework
(3)应用程序不用重新编译,直接运行即可,JIT会自动生成针对64位的机器码。但如果你的应用程序中包含了下列因素,可能会出问题:浮点比较运算、二进制序列化、PInvoke等。
(4)如果应用程序有加密,要改用64位的加密工具:)
相关文章推荐
- 如何突破.NET内存限制?
- 如何在32位程序中突破地址空间限制使用超过4G的内存
- 如何突破24M内存的限制,为Android程序分配到更多内存
- 【ZT】如何在32位程序中突破地址空间限制使用超过4G的内存
- 如何在32位程序中突破地址空间限制使用超过4G的内存
- 如何在32位程序中突破地址空间限制使用超过4G的内存
- 如何在32位程序中突破地址空间限制使用超过4G的内存
- oracle在32位的Linux环境下SGA如何突破2GB内存限制的最终解决方案
- oracle在32位的Linux环境下SGA如何突破2GB内存限制的最终解决方案
- 如何在32位程序中突破地址空间限制使用超过4G的内存
- 如何在32位程序中突破地址空间限制使用超过4G的内存
- 如何突破局域网对上网用户的一些限制
- 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前篇)—托管资源优化—垃圾回收机制深度剖析
- Net 应用程序如何在32位操作系统下申请超过2G的内存
- c#如何限制程序内存使用的大小
- 如何限制mongodb数据库内存占用量方法
- 小技巧:如何突破某些网站只能登陆后才能进行文字拷贝的限制
- 让.Net 应用程序突破2G的内存访问限制
- 如何在ASP.net中实现限制一个用户名在多个客户端IE登陆的方法
- 让SQL SERVER突破2G内存限制