c# winform 奇怪的内存溢出错误

问题描述

c#winform程序,我采用的多线程模式,程序运行几十个小时,(也有个别的机器,运行4-5个小时),报以下错误:查了很久,没发现程序哪个地方内存出现问题了:有关调用实时(JIT)调试而不是此对话框的详细信息,请参见此消息的结尾。**************异常文本**************System.OutOfMemoryException:引发类型为“System.OutOfMemoryException”的异常。在System.Reflection.Assembly._nLoad(AssemblyNamefileName,StringcodeBase,EvidenceassemblySecurity,AssemblylocationHint,StackCrawlMark&stackMark,BooleanthrowOnFileNotFound,BooleanforIntrospection)在System.Reflection.Assembly.nLoad(AssemblyNamefileName,StringcodeBase,EvidenceassemblySecurity,AssemblylocationHint,StackCrawlMark&stackMark,BooleanthrowOnFileNotFound,BooleanforIntrospection)在System.Reflection.Assembly.InternalGetSatelliteAssembly(CultureInfoculture,Versionversion,BooleanthrowOnFileNotFound)在System.Resources.ResourceManager.GetSatelliteAssembly(CultureInfolookForCulture)在System.Resources.ResourceManager.InternalGetResourceSet(CultureInfoculture,BooleancreateIfNotExists,BooleantryParents)在System.Resources.ResourceManager.InternalGetResourceSet(CultureInfoculture,BooleancreateIfNotExists,BooleantryParents)在System.Resources.ResourceManager.GetString(Stringname,CultureInfoculture)在System.Drawing.SR.GetString(Stringname)在System.Drawing.SafeNativeMethods.Gdip.StatusException(Int32status)在System.Drawing.Graphics.CheckErrorStatus(Int32status)在System.Drawing.Graphics.DrawImage(Imageimage,RectangledestRect,Int32srcX,Int32srcY,Int32srcWidth,Int32srcHeight,GraphicsUnitsrcUnit,ImageAttributesimageAttrs,DrawImageAbortcallback,IntPtrcallbackData)在System.Drawing.Graphics.DrawImage(Imageimage,RectangledestRect,Int32srcX,Int32srcY,Int32srcWidth,Int32srcHeight,GraphicsUnitsrcUnit,ImageAttributesimageAttr,DrawImageAbortcallback)在System.Drawing.Graphics.DrawImage(Imageimage,RectangledestRect,Int32srcX,Int32srcY,Int32srcWidth,Int32srcHeight,GraphicsUnitsrcUnit,ImageAttributesimageAttr)在System.Windows.Forms.ControlPaint.DrawBackgroundImage(Graphicsg,ImagebackgroundImage,ColorbackColor,ImageLayoutbackgroundImageLayout,Rectanglebounds,RectangleclipRect,PointscrollOffset,RightToLeftrightToLeft)在System.Windows.Forms.Control.PaintBackground(PaintEventArgse,Rectanglerectangle,ColorbackColor,PointscrollOffset)在System.Windows.Forms.Control.PaintBackground(PaintEventArgse,Rectanglerectangle)在System.Windows.Forms.Control.OnPaintBackground(PaintEventArgspevent)在System.Windows.Forms.ScrollableControl.OnPaintBackground(PaintEventArgse)在System.Windows.Forms.Control.PaintTransparentBackground(PaintEventArgse,Rectanglerectangle,RegiontransparentRegion)在System.Windows.Forms.Control.PaintBackground(PaintEventArgse,Rectanglerectangle,ColorbackColor,PointscrollOffset)在System.Windows.Forms.Control.PaintBackground(PaintEventArgse,Rectanglerectangle)在System.Windows.Forms.Control.OnPaintBackground(PaintEventArgspevent)在System.Windows.Forms.ScrollableControl.OnPaintBackground(PaintEventArgse)在System.Windows.Forms.ToolStrip.OnPaintBackground(PaintEventArgse)在System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgse,Int16layer)在System.Windows.Forms.Control.WmPaint(Message&m)在System.Windows.Forms.Control.WndProc(Message&m)在System.Windows.Forms.ScrollableControl.WndProc(Message&m)在System.Windows.Forms.ToolStrip.WndProc(Message&m)在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)在System.Windows.Forms.NativeWindow.Callback(IntPtrhWnd,Int32msg,IntPtrwparam,IntPtrlparam)

解决方案

本帖最后由 wylj20052006 于 2015-05-25 14:57:42 编辑
解决方案二:
资源泄漏:1.查内存泄漏,检查反复申请,特别是在线程中循环处理的部分2.查Handle等句柄的申请释放推荐使用.NetMemoryProfiler工具来查
解决方案三:
真晦气,找到问题了,使用了一个第三方的计算工具,我程序里每秒调一次,调用一次增加1M的内存占用,4小时候就溢出了
解决方案四:
调用完记得dispose不要一直new,不释放

时间: 2025-01-20 09:53:24

c# winform 奇怪的内存溢出错误的相关文章

位图-android为啥这条语句老是报内存溢出错误?

问题描述 android为啥这条语句老是报内存溢出错误? Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 就是这条语句,经常报java.lang.outofMemoryError错误?各位大牛谁知道,可以改一个其他的方法吗? 解决方案 是不是因为你的图片太大了,把它换为android自带的图标试试.或者直接使用Canvas.drawBitmap(

java中三种常见内存溢出错误的处理方法(good)

相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).Heap space(堆区域).Java Stacks(Java栈).其中永久保存区域主要存放Class

Eclipse中运行Tomcat遇到的内存溢出错误

使用Eclipse(版本Indigo 3.7)调试Java项目的时候,遇到了下面的错误: Exception in thread "main" Java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) 很明显是内存溢出的错误,在Eclipse集

phpExcel导出大量数据出现内存溢出错误的解决方法_php技巧

phpExcel将读取的单元格信息保存在内存中,我们可以通过 复制代码 代码如下: PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存方式,已达到降低内存消耗的目的! 1.将单元格数据序列化后保存在内存中 复制代码 代码如下: PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 2.将单元格序列化后再进行Gzip压缩,然后保存在内存中 复制代码 代码如下: PHPEx

phpExcel导出大量数据出现内存溢出错误解决办法

phpExcel将读取的单元格信息保存在内存中,我们可以通过  代码如下 复制代码 PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存方式,已达到降低内存消耗的目的! 1.将单元格数据序列化后保存在内存中  代码如下 复制代码 PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;  2.将单元格序列化后再进行Gzip压缩,然后保存在内存中  代码如下 复制代码 PHPE

centos中修改tomcat中JVM非堆内存默认配置解决内存溢出

系统CentOS6.4下yum安装了tomcat6和jdk1.6,安装配置过程如下: http://www.111cn.net/sys/CentOS/72007.htm tomcat中部署两个项目A.B,同时部署时报内存溢出错误,系统CPU负载飙升,而单独部署A.B 和 只部署多个A或者只部署多个B项目系统运行正常. 查看日志报错:OutOfMemoryError: PermGen space-.   查询资料得知:是非堆溢出(永久保存区域溢出) 这种错误常见在web服务器对JSP进行pre c

Java中OutOfMemoryError(内存溢出)的三种情况及解决办法(转)

相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).Heap space(堆区域).Java Stacks(Java栈).其中永久保存区域主要存放Class

java heap space-内存溢出错误-Java heap space

问题描述 内存溢出错误-Java heap space 环境是纯JAVA 用Eclipse开发 功能是通过API获取微博信息 之前在网上找到相关错误资料说是修改JVM的HEAP大小 但我修改后还是报错.希望大家提供解决方案或者思路 谢谢报错信息: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at org.apache.commons.collections.map.ListOrderedM

Java内存溢出(OOM)异常完全指南

我的职业生涯中见过数以千计的内存溢出异常均与下文中的8种情况相关.本文分析什么情况会导致这些异常出现,提供示例代码的同时为您提供解决指南. 这也许是目前最为完整的Java OOM异常的解决指南. 1.java.lang.OutOfMemoryError:Java heap space Java应用程序在启动时会指定所需要的内存大小,它被分割成两个不同的区域:Heap space(堆空间)和Permgen(永久代): JVM内存模型示意图 这两个区域的大小可以在JVM(Java虚拟机)启动时通过参