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

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

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

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

da7cacfdfbd2b7415a65366ccf7a0f9a.png

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

e9693e56a590217af54e3842e0db3182.png

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

d8b64e9997a65d5fe1f91acca636a2d8.png

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

.Net 8应用

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

4dc1000a205eb394f5f6bb23a66b1c2f.png

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

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

dnSpy

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

e10354d7ca142dec71d32350a0a6898c.png

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

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

我这边的工具路径在

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

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

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

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

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

具体例子如下:

65df30314cee94519fc9511cab56621f.png

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

通过输入

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

以下是输入后的样子

0c4b32f4e7a61694876284449d407094.png

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

f41b3c17ddc74e5e37797a94b857b6f7.png

dotnetCampus.LargeAddressAware

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

6d918c8b812c9d5af8ba579659118380.png

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

a0d63edcd4941c8c5885e3396ccb4761.png

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

276e04471cb3fedcdbc3ee45553cbeab.png

使用方法是特别的简单

实际原理分析
919e1416891401d7a3a734f0d3b0e058.png

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

18202ac26d55507edeaa49d6dfaa09d1.png

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

总结

这种还在使用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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InstallShield是一个用于创建和打包安装程序的软件工具。它被广泛用于安装Windows操作系统环境下的应用程序,其中包括安装.NET应用程序。 要使用InstallShield安装.NET应用程序,需要按照以下步骤进行操作: 1. 打开InstallShield软件。启动软件后,选择创建一个新的项目。 2. 在新项目向导中,选择“基于安装类型的向导”。这样可以根据应用程序类型选择合适的安装类型。 3. 在“选择输出类型”页面上,选择“启动式安装程序”。 4. 在“安装描述”页面上,填写相关的应用程序信息,包括应用程序名称、版本号、公司名称等。 5. 在“安装设置”页面上,选择.NET应用程序的安装目录。还可以选择其他选项,如在开始菜单创建快捷方式等。 6. 在“文件”页面上,添加.NET应用程序的相关文件。这些文件包括主程序文件、依赖文件和其他资源文件。 7. 在“系统配置”页面上,选择.NET框架的版本。如果.NET框架未安装,可以选择在安装程序中自动安装。 8. 在“预定义动作”页面上,可以选择在安装过程中执行的其他任务,如注册组件、创建数据库等。 9. 在“生成”页面上,可以选择生成安装程序的属性,包括安装程序图标、语言等。 10. 点击“生成”按钮,生成.NET应用程序的安装程序。 11. 最后,将生成的安装程序分发给用户,用户可以双击安装程序并按照提示步骤安装.NET应用程序。 通过使用InstallShield,可以轻松地创建和打包.NET应用程序的安装程序,使得用户可以方便地安装和运行应用程序。这种方式可以确保.NET应用程序正确地安装并配置所需的依赖项,提供更加稳定和一致的安装体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值