当前位置 : 主页 > 编程语言 > 其它开发 >

.Net 应用考虑x64生成

来源:互联网 收集:自由互联 发布时间:2022-07-05
在x86架构下使用32位应用程序,理论上32位能够分配4G的大小空间,但实际上默认 .NET Framework 可以创建一个不超过 2 GB 的对象,在实际使用过程中可能使用到1.5G的样子就会报内存溢出异常

在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的处理时间要少些。

网友评论