OutOfMemoryException问题

.Net技术 码拜 8年前 (2016-09-14) 1772次浏览
       用VS2015开发的C#程序,假如用VS2015调试的话,在new bytes[]的时候就会崩溃OutOfMemoryException,但是假如直接从exe启动该程序,就没有问题。
并且,发现用vs2015调试程序,内存分配不会上3G,而exe直接启动程序,内存可以分配到3.7或3.8G。
问一下这是什么原因造成?需要修改说明配置吗?
解决方案

10

晕!
几乎全部的 OutOfMemoryException 异常都跟你看到的所谓的物理内存大小没有直接关系,只跟你的某个对象的.net 底层分配机制有关,例如应用默认的堆栈大小、windows线程默认的对象默认的堆栈大小、你访问的对象是使用线程默认堆栈还是应用系统本人的另外一套自定义堆栈………….有关。通常一个数组(或集合)分配了xxxxx 数量的单元,就抛出 OutOfMemoryException 异常了。跟当前物理内存用了3G 还是20G 没有直接关系。
OutOfMemoryException 不会出现在特别简单的东西上。假如出现,说明它启动了数组边界保护和检查措施;假如没有出现,说明它使用了c风格——任由最终崩溃或数据混乱,而不预先做保护。但是没有哪个机制说 OutOfMemoryException 跟windows 物理内存大小直接相关,不要死扣字眼儿!
你应该给出抛出异常时的具体的数据大小。不要扑风捉影。

10

VS2015调试的时候是可以显示性能信息的,包括线程,内存,CPU,到出异常那句看下,看下那个线程和内存使用情况
NET整个使用的内存是有一定限制的,可以通过加大配置使用量来减少内存溢出的发生。方法如下:修改machine.config文件,一般在%System%/Microsoft.Net/Framework/vxxx版本号/CONFIG目录中, 修改processModel元素中的memoryLimit,大于缺省设置的60(意味着物理内存的60%)
另外要避免new byte[]大对象,最好从逻辑上优化设计,重复利用缓冲区

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明OutOfMemoryException问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)