如何让32位.Net 应用打开3G开关

昨天刚分享了《如何让.NET应用使用更大的内存》,结果就有同学说,<最好加一下32位如何开启大内存,因为很多传统项目32位,实在迁移不动了>,那么,我就验证了一些可行的方案,发现都挺简单的。

如何查看 Large Address Aware(大地址感知 [3G开关] )

最常用的工具就是dnSpy(在参考资料里,可以下载)

打开这个软件,把我们验证的MemeryTest (32) 应用程序直接拖拉进去,就会显示我们的程序集相关信息,在我的步骤第二步,编辑模块,就可以看到这个应用程序的PE头里的信息。

可以看到,默认是i386 机器,默认的 Larg Address Aware 是没有被选中的。

而 64位应用程序 默认是 AMD64机器,默认 Large Address Aware 是被选中的,也符合昨天分享文章中所说的,64位应用默认是开启的。

.Net 8应用

我刚好也验证了一下最新刚出来的.Net 8 应用程序,也发现,它的头部信息在 dnSpy里是如下所示

直接在文件头项里就能看到结果了

如何修改使能 Large Address Aware(大地址感知 [3G开关] )

dnSpy

最简单的方案就是使用dnSpy,

直接打对钩,然后,保存项目即可。

再次打开,发现已经被修改了

editbin.exe和dumpbin.exe Visual Studio 自带工具

我这边的工具路径在

csharp 复制代码
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.38.33130\bin\Hostx86\x86

然后,通过以下相关命令,来修改(使能)应用的3G开关。

csharp 复制代码
.\editbin.exe   /largeaddressaware "E:\MemoryTest.exe"

通过以下命令来查看,是否修改成功

csharp 复制代码
.\dumpbin.exe /headers "E:\MemoryTest.exe"

具体例子如下:

默认查看32位应用,是没有开启的

通过输入

csharp 复制代码
.\editbin.exe   /largeaddressaware "E:\MemoryTest\bin\x86\Debug\MemoryTest.exe"

以下是输入后的样子

设置完之后,再次查看,已经开启了。

dotnetCampus.LargeAddressAware

我也是在搜索的时候发现这个优秀的库的,我看它的介绍是,支持 .NET Core 和 .NET Framework的。

使用方法也很简单,直接nuget 应用 <dotnetCampus.LargeAddressAware> 包即可。

编译生成后,直接就看到,它已经打开3G的开关了。

使用方法是特别的简单

实际原理分析

从这个图就可以看到,实际上它也是用了微软提供的工具来进行修改的。

从项目中也可以看到,它是通过编译的时候,顺便把开关给你开开。一种不错的解决方案。

总结

这种还在使用32位应用的场景大部分都是传统老的项目还在运行在很老的环境上,衷心希望这样长久的项目以后也越来越多(以后几百G的内存应该比比皆是了)。

再次感谢有反馈的大佬。

代码地址

https://github.com/kesshei/MemeryTest.git

https://gitee.com/kesshei/MemeryTest.git

参考资料地址

csharp 复制代码
《dnspy》
https://github.com/dnSpy/dnSpy
《dotnetCampus.LargeAddressAware》
https://github.com/dotnet-campus/dotnetCampus.LargeAddressAware

一键三连呦!,感谢大佬的支持,您的支持就是我的动力!

相关推荐
龙鸣丿1 分钟前
Linux基础学习笔记
linux·笔记·学习
耶啵奶膘2 小时前
uniapp-是否删除
linux·前端·uni-app
2401_850410832 小时前
文件系统和日志管理
linux·运维·服务器
XMYX-03 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
一只哒布刘4 小时前
NFS服务器
运维·服务器
二十雨辰5 小时前
[linux]docker基础
linux·运维·docker
饮浊酒6 小时前
Linux操作系统 ------(3.文本编译器Vim)
linux·vim
lihuhelihu6 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
矛取矛求6 小时前
Linux系统性能调优技巧
linux