C#winform应用程序outofmemoryexception解决方案?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#winform应用程序outofmemoryexception解决方案?相关的知识,希望对你有一定的参考价值。
using (SqlConnection connection = new SqlConnection(PubVariant.ConnectionString))
connection.Open();
string strSql0 = "select Data from DataTable where FileName = '0'";
string strSql1 = String.Format(strSql0, fileName);
using (SqlCommand cmd = new SqlCommand(strSql1, connection))
using (SqlDataReader dr = cmd.ExecuteReader())
dr.Read();
bytes = (byte[])dr[0];
using(FileStream pFileStream = new FileStream(destFilePath,FileMode.OpenOrCreate,FileAccess.ReadWrite))
pFileStream.Write(bytes, 0, bytes.Length);
断点调试看看是不是死循环导致的.
采用WeakReference
我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的。我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现。弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。弱引用使用起来很简单,看下面的代码:
Object obj = new Object();
WeakReference wref = new WeakReference( obj );
obj = null;
第一行代码新建了一个新的对象,这里叫它对象A,obj是对对象A的强引用。接着第二行代码新建了一个弱引用对象,参数就是对象A的强引用,第三行代码释放掉对对象A的强引用。这时如果GC进行回收,对象A就会被回收。
怎样在取得对象A的强引用呢?很简单,请看代码2:
Object obj2 = wref.Target;
if( obj2 != null )
// 做你想做的事吧。
else
// 对象已经被回收,如果要用必须新建一个。
只要显示的将弱引用的Target属性附值就会得到弱引用所代表对象的一个强引用。不过在使用对象之前要对其可用性进行检查,因为它可能已经被回收了。如 果你得到的是null(VB.NET下为Nothing),表明对象已经被回收,不能再用了,需要重新分配一个。如果不是null,就可以放心大胆的用 了。 参考技术A 哪行报的错,如果是 bytes = (byte[])dr[0];
出错,你的数据有多大?追问
数据是500M左右
追答500M的数据你存在数据库?
本回答被提问者采纳以上是关于C#winform应用程序outofmemoryexception解决方案?的主要内容,如果未能解决你的问题,请参考以下文章
C#winform程序怎么在webbrowser中打开网页???