我不断得到一个'System.OutOfMemoryException‘在下面的代码抛出。我不知道内存泄漏在哪里,如果有人能解释我做错了什么,这将是一个很大的帮助。谢谢!
lock ((_tabs))
{
System.IO.StreamReader sr = null;
System.IO.MemoryStream ms = null;
try
{
Type[] t = { typeof(tsgPublicDecs.tsgClsTab) };
System.Xml.Serialization.XmlSerializer srl = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), t);
ms = new System.IO.MemoryStream();
srl.Serialize(ms, _tabs);
ms.Seek(0, 0);
sr = new System.IO.StreamReader(ms);
return sr.ReadToEnd();
}
finally
{
if (((sr != null)))
{
sr.Close();
sr.Dispose();
}
if (((ms != null)))
{
ms.Close();
ms.Dispose();
}
}
}编辑:回答以下几个问题:
编辑2:感谢您的所有输入。添加使用和寻找其他可能的内存泄漏似乎是最好的方法。看到人们这么快就能伸出援手,真是太好了!
发布于 2010-02-12 16:02:56
它尖叫着要用一两个街区。
lock ((_tabs))
{
Type[] t = { typeof(tsgPublicDecs.tsgClsTab) };
System.Xml.Serialization.XmlSerializer srl = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), t);
using ( System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
srl.Serialize(ms, _tabs);
ms.Seek(0, 0);
using (System.IO.StreamReader sr = new System.IO.StreamReader(ms))
{
return sr.ReadToEnd();
}
}
}发布于 2010-02-12 16:21:47
你确定问题在这里吗?
你不是在其他地方漏掉记忆吗?
OutOfMemoryException可以从任何地方抛出到内存分配中,这可能只是发生在这里的巧合。
尝试在内存分析器中分析应用程序,看看是否保存了一些会导致内存“泄漏”的引用。
尝试从您的测试机器中删除尽可能多的RAM (取决于操作系统,在XP上尽量减少到256/128 MB ),并多次运行重复用例(不一定只是运行此代码的用例)。
发布于 2010-02-12 16:02:41
取决于_tabs的大小,您通过sr.ReadToEnd()读取整个序列化流的事实可能是导致它的原因。
https://stackoverflow.com/questions/2253043
复制相似问题