如何让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 自带工具

我这边的工具路径在

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的。


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

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

使用方法是特别的简单

实际原理分析

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


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

总结

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

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

相关推荐

  1. 电机控制应用芯片使用国产32MCU如何

    2023-12-19 06:34:05       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-19 06:34:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-19 06:34:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-19 06:34:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-19 06:34:05       20 阅读

热门阅读

  1. .net web API的文件传输(上传和下载)客户端winform

    2023-12-19 06:34:05       32 阅读
  2. 【Node】npm使用手册

    2023-12-19 06:34:05       46 阅读
  3. 文件相关工具类Utils(WORD,PDF,PNG)

    2023-12-19 06:34:05       33 阅读
  4. 第六章--- 实现微服务:匹配系统(下)

    2023-12-19 06:34:05       28 阅读
  5. 在iframe怎么把外面的dialog关掉

    2023-12-19 06:34:05       36 阅读
  6. IDE:DevEco Studio

    2023-12-19 06:34:05       48 阅读
  7. 每日一练,蓝桥杯

    2023-12-19 06:34:05       51 阅读
  8. serializable和parcelable的区别(GPT回答)

    2023-12-19 06:34:05       39 阅读
  9. 读写分离之同步延迟测试

    2023-12-19 06:34:05       51 阅读