.Net 应用考虑x64生成
在x86架构下使用32位应用程序,理论上32位能够分配4G的大小空间,但实际上默认 .NET Framework 可以创建一个不超过 2 GB 的对象,在实际使用过程中可能使用到1.5G的样子就会报内存溢出异常。
刚写了一个读取数据在内存中组装xml的程序,有10多万条数据,结果程序运行一段时间后就报内存溢出。而我本机是16GB,内存消耗不到8G,我又不想修改程序。所以我就将程序生成x64,不仅成功处理而且速度提升不少。
目前只要是比较新的vs在程序生成的时候VS默认选择的是32位,所以生成的时候尽管你的PC是64位,但是程序任然以32位运行。
这样生成的程序考虑兼容性,目标平台any cpu ,默认首选32位。
我们只需要将目标平台选择x64即可。
默认情况下,在 64 位 Windows 操作系统上运行 64 位托管应用程序时,可以创建一个不超过 2 GB 的对象。 然而,在 .NET Framework 4.5 中,可以增加该限制。以为CLR也有32位和64位之分,所以 .NET Framework要求4.5+
我的程序时4.6.1,然后如果你发现数组这些对象还是不能使用超过2G,那么你可以在config里面将gcAllowVeryLargeObjects
配置添加进去。
<configuration>
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
同时可以通过在VS 2022 中配置生成,生成的时候选择要生成的平台就行了 。了解生成平台
并且目前新的VS 2022本身IDE也是64位,所以了解下而不是都默认选项有时候会事半功倍。
https://devblogs.microsoft.com/visualstudio/visual-studio-2022/
我的xml生成程序如下,我们使用不同位数对比下处理时间。
x86:
x64:
由于数据量大的时候加载内存32位会内存溢出,所以我减少了数据让程序都能运行,只有几万条,但还是可以看出来x64的处理时间要少些。
相关文章
- MySQL Connector/Net 的简单使用「建议收藏」
- .net 温故知新:【9】.NET日志记录 ILogger使用和原理
- .NET MAUI 社区工具包 1.3版本发布
- 【水一篇】骚操作之net 6的winform启动的同时启动Net 6 WebApi【同一套代码】
- 大数据的应用实例_net开源开发web框架
- .net 温故知新:【8】.NET 中的配置从xml转向json
- 宝塔面板Linux系统通过Docker部署VB.NET Asp.Net Core WebAPI应用
- Linux.Net:开启新技术之旅(linux.net)
- Oracle 等待事件 SQL*Net message to client 官方解释,作用,如何使用及优化方法
- MySQL与VB.NET的数据库开发实践(mysqlvb.net)
- VB.NET构建多层数据库应用:使用MSSQL(vb.net mssql)
- NET环境下 MySQL数据库应用实践(.net配合 mysql)
- Net结合MySQL实现强劲的数据库运算(.net 用mysql)
- Net中连接MySQL技术简述(.net中引用mysql)
- asp.net获取SQL所有数据库名、所有表名、所有字段名
- asp.net下生成99个不同的随机数
- 分析10个ASP.NET控件最有用的属性详解
- LiteralControlASP.NET中的另类控件
- 答你所问.NET小常识方便学习asp.net的朋友
- 基于.NET中建构子中传递子对象的对象详解