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

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

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

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

如何让32位.Net 应用打开3G开关_第1张图片

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

如何让32位.Net 应用打开3G开关_第2张图片

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

如何让32位.Net 应用打开3G开关_第3张图片
而 64位应用程序 默认是 AMD64机器,默认 Large Address Aware 是被选中的,也符合昨天分享文章中所说的,64位应用默认是开启的。

.Net 8应用

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

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

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

dnSpy

最简单的方案就是使用dnSpy,
直接打对钩,然后,保存项目即可。

如何让32位.Net 应用打开3G开关_第4张图片

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

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

我这边的工具路径在

C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.38.33130\bin\Hostx86\x86

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

.\editbin.exe   /largeaddressaware "E:\MemoryTest.exe"

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

.\dumpbin.exe /headers "E:\MemoryTest.exe"

具体例子如下:

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

通过输入

.\editbin.exe   /largeaddressaware "E:\MemoryTest\bin\x86\Debug\MemoryTest.exe"

以下是输入后的样子

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

dotnetCampus.LargeAddressAware

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

如何让32位.Net 应用打开3G开关_第5张图片
使用方法也很简单,直接nuget 应用 包即可。
如何让32位.Net 应用打开3G开关_第6张图片
编译生成后,直接就看到,它已经打开3G的开关了。
如何让32位.Net 应用打开3G开关_第7张图片
使用方法是特别的简单

实际原理分析

如何让32位.Net 应用打开3G开关_第8张图片

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


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

总结

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

再次感谢有反馈的大佬。

代码地址

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

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

参考资料地址

《dnspy》
https://github.com/dnSpy/dnSpy
《dotnetCampus.LargeAddressAware》
https://github.com/dotnet-campus/dotnetCampus.LargeAddressAware

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

你可能感兴趣的:(.Net,Core,Asp.Net,.Net,6,.net,服务器,linux,3G内存开关)