C#编写大计算量程序总是报内存溢出System.OutOfMemoryException的重要原因

本文揭示了C#程序在64位系统下遇到内存溢出的真正原因——32位程序的内存限制。通过调整Visual Studio的编译目标为64位,有效解决内存占用问题,无论物理内存多大。

笔者为C#业余爱好者,从开始编写一些计算量较大、内存占用较大的程序时,经常会在编译时报出System.OutOfMemoryException(内存溢出)的错误异常,而实际上,当时的剩余内存还多的是,最终只能改变原有算法,尽量减少内存占用。
在这里插入图片描述

   我至少经历过以下一些场景的内存溢出提示:
   1、使用DataTable或者DataSet,明明没有达到二者的最大行数闲置,却报出了内存溢出异常;
   2、使用系统类库,逐行读取一个超大的TXT文件时,读到一定程度报内存溢出;
   3、在数组、List中存入过多的数据,时不时报出内存溢出问题。
  而这些情况在发生时,电脑的物理内存,明明剩余很多,可能剩余内存多大十几GB,并且似乎,每次报出内存溢出时,该程序占用的内存大概只有2.8~3GB左右。

如果你也碰到了此类情况,并且看到了本文,恭喜你,找到了此类问题的根本原因和解决办法,不用再去费尽心机修改代码以节省内存占用了。

众所周知,处理器区分32位和64位,操作系统也区分32位和64位,并且二者遵循如下关系:
1、在32位处理器的电脑上,只能看装32位操作系统
2、在64位处理器的电脑上,既能安装32位也能安装64位操作系统。
而对于应用程序来说:
1、在32位操作系统上,只能运行32位(X86)的程序
2、在64位操作系统上,既能运行32位(X86)的程序,也能运行64位程序(X64)。

对于操作系统的内存支持上来说,操作系统识别的物理内存:
1、在32位操作系统上,最大支持2^32=4GB的内存,由于一部分内存地址作为硬件等其他设备的专用进行保留,留给应用程序可用的一般在3.25GB左右
2、在64位操作系统上,最大支持2^64bit的内存,换算成GB是多大呢?可以明确的告诉你,非常大,按照当前的计算机技术,接近无限大了(超过PB级别),但是受限于 CPU,现在一般民用级别的处理器,基本最大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值