如何让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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/231609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网安全—Windows系统内核溢出漏洞提权

系统内核溢出漏洞提权 往缓冲区中写入超出限定长度的内容&#xff0c;造成缓冲区溢出&#xff0c;从而破坏程序的堆栈进而运行自己精心准备的指定代码&#xff0c;达到攻击的目的。 分类&#xff1a; 堆溢出 栈溢出 查找补丁的方法 1、手工查找补丁情况 systeminfo Wmic qfe…

CGAL和求解器

几个CGAL包必须解决稠密或稀疏矩阵的线性系统、线性整数规划和二次规划。这个包为此提供了概念和模型。 对于线性系统&#xff0c;我们通常使用Eigen库提供模型。 Eigen类Eigen_matrix和Eigen_vector的封装器也在需要时提供。为其他求解器开发等效模型很简单&#xff0c;例如在…

在Django中使用多语言(i18n)

在Django中使用多语言 配置中间件 MIDDLEWARE [......django.contrib.sessions.middleware.SessionMiddleware,django.middleware.locale.LocaleMiddleware, # 此行重点django.middleware.common.CommonMiddleware,...... ]配置翻译文件目录 根目录下创建目录locale # 国…

Cmake基础(5)

这篇文章主要描述如何使用cmake构建一个库工程 文章目录 add_libraryinstall 库工程的代码&#xff1a;头文件和源文件 #ifndef ADD_H #define ADD_H#ifdef _WIN32 #ifdef MYMATH_EXPORTS #define MYMATH_API __declspec(dllexport) #else #define MYMATH_API __declspec(dll…

CopyOnWriteArrayList(一)

1 CopyOnWriteArrayList介绍 CopyOnWriteArrayList是一个线程安全的ArrayList。 CopyOnWriteArrayList是基于lock锁和数组副本的形式去保证线程安全。 在写数据时&#xff0c;需要先获取lock锁&#xff0c;需要复制一个副本数组&#xff0c;将数据插入到副本数组中&#xff0c…

Semaphore学习一

一、定义 是JUC包下的一个工具类&#xff0c;我们可以通过其限制执行的线程数量&#xff0c;达到限流的效果。 当一个线程执行时先通过其方法进行获取许可操作&#xff0c;获取到许可的线程继续执行业务逻辑&#xff0c;当线程执行完成后进行释放许可操作&#xff0c;未获取达到…

Python 全栈体系【四阶】(七)

第四章 机器学习 六、多项式回归 1. 什么是多项式回归 线性回归适用于数据呈线性分布的回归问题。如果数据样本呈明显非线性分布&#xff0c;线性回归模型就不再适用&#xff08;下图左&#xff09;&#xff0c;而采用多项式回归可能更好&#xff08;下图右&#xff09;。例…

数据安全传输基础设施平台(二)

5安全传输平台总体设计 5.1 方案特点 规范化&#xff1a;严格遵循各种相关规范设计。独立性&#xff1a;系统各子系统间互相独立&#xff0c;在保持系统间接口的前提下&#xff0c;各系统间的升级互不干扰。最小耦合性&#xff1a;各子系统进行严格功能分解&#xff0c;每个子…

PCL点云处理之点云置平(拟合平面绕中心旋转到绝对水平)(二百二十七)

PCL点云处理之点云置平(绕中心旋转到绝对水平)(二百二十七) 一、什么是点云置平二、算法流程三、算法实现一、什么是点云置平 有时候,我们处理的点云平面并非位于水平面,而是位于某个任一三维平面上,而大多数算法又只能在水平面处理,或者水平面的点云处理是相对更简单…

P2P应用

目录 一.P2P的简介 二.P2P的工作方式 1.具有集中目录服务器的P2P工作方式 2.具有全分布式结构的P2P文件共享程序 一.P2P的简介 P2P(对等连接)&#xff0c;是指两台主机在通信时&#xff0c;并不区分哪一个是服务请求方和哪一个是服务提供方。只要两台主机都运行了对等连接…

人工智能_机器学习069_SVM支持向量机_网格搜索_交叉验证参数优化_GridSearchCV_找到最优的参数---人工智能工作笔记0109

然后我们再来说一下SVC支持向量机的参数优化,可以看到 这次我们需要,test_data这个是测试数据,容纳后 train_data这个是训练数据 这里首先我们,导出 import numpy as np 导入数学计算包 from sklearn.svm import SVC 导入支持向量机包 分类器包 def read_data(path): wit…

ping: unknown host www.baidu.com

您遇到的问题表明系统无法解析 “www.baidu.com” 的域名。这通常与 DNS&#xff08;域名系统&#xff09;配置或网络连接问题有关。以下是一些解决步骤&#xff1a; 1. 检查网络连接 首先确保您的系统已连接到互联网。您可以尝试 ping 一些知名的网站或使用 IP 地址来测试连…

从事开发近20年,经历过各种技术的转变和进步

1、jsp、javabean、servlet、jdbc。 2、Struts1、hibernate、spring。 3、webwork、ibatis、spring 4、Struts2、mybatis、spring 5、spring mvc &#xff0c;spring全家桶 6、dubbo&#xff0c;disconf 微服务&#xff0c;soa 7、springboot 全家桶 8、docker 9、dock…

qt使用事件来进行文件操作

使用键盘进行操作 #include<QKeyEvent> 包含的头文件 在.h文件中添加此函数 void keyPressEvent(QKeyEvent*k); 在.cpp中的实现操作 void MainWindow::keyPressEvent(QKeyEvent*k) {if(k->modifiers()Qt::ControlModifier&&k->key()Qt::Key_S){saveAc…

AXure的情景交互

目录 导语&#xff1a; 1.erp多样性登录界面 2.主页跳转 3.省级联动​编辑 4. 下拉加载 导语&#xff1a; Axure是一种流行的原型设计工具&#xff0c;可以用来创建网站和应用程序的交互原型。通过Axure&#xff0c;设计师可以创建情景交互&#xff0c;以展示用户与系统的交…

力扣题目学习笔记(OC + Swift) 14. 最长公共前缀

14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 方法一 竖向扫描法 个人感觉纵向扫描方式比较直观&#xff0c;符合人类理解方式&#xff0c;从前往后遍历所有字符串的每一列&#xff0c;比较相同列上的…

出国旅游需要注意些什么

出国旅游是一种令人兴奋、令人期待的经历。然而&#xff0c;在进行这种经历之前&#xff0c;有几件事情是需要注意的。本文将为您介绍出国旅游需要注意的一些重要事项。首先&#xff0c;为了确保您的出国旅行顺利进行&#xff0c;您应该提前办理好您的签证和护照。不同国家对于…

swing快速入门(十七)

上一篇 Java Swing常见事件和事件监听器 事件 Java Swing中有各种各样的事件&#xff0c;其中一些常见的事件包括&#xff1a; 按钮事件&#xff08;Button Events&#xff09;&#xff1a;与按钮相关的事件&#xff0c;例如点击、释放、进入/离开按钮等。 鼠标事件&#x…

leetCode算法—5. 最长回文子串

给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s “babad” 输出&#xff1a;“bab” 解释&#xff1a;“aba” 同样是符合题意的答案。 示例 2&…

4-Docker命令之docker login

1.docker login介绍 docker login命令是用来登录到一个docker镜像仓库,如果没有指定镜像仓库地址,默认为docker hub官方仓库。如果使用docker login命令登录到官方仓库,首先需要在官方仓库注册一个账号 本次为大家演示使用docker login命令登录自己搭建的harbor私有仓库 …