首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码评审: OutOfMemoryException问题

代码评审: OutOfMemoryException问题
EN

Stack Overflow用户
提问于 2010-02-12 15:54:36
回答 6查看 2.5K关注 0票数 1

我不断得到一个'System.OutOfMemoryException‘在下面的代码抛出。我不知道内存泄漏在哪里,如果有人能解释我做错了什么,这将是一个很大的帮助。谢谢!

代码语言:javascript
复制
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();
        }
    }
}

编辑:回答以下几个问题:

  • _tabs没有被任何东西填充(这带来了许多其他问题,为什么要使用它,但是我需要问编写它的开发人员)。
  • 抛出错误的行是'srl.Serialize(ms,_tabs);‘
  • 这个错误是随机的,我无法自己复制它,但是让它运行超过几天,这将抛出。因此,除了抛出的错误之外,我无法(不知道如何)获取任何信息。

编辑2:感谢您的所有输入。添加使用和寻找其他可能的内存泄漏似乎是最好的方法。看到人们这么快就能伸出援手,真是太好了!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-12 16:02:56

它尖叫着要用一两个街区。

代码语言:javascript
复制
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();
           }
        }


}
票数 0
EN

Stack Overflow用户

发布于 2010-02-12 16:21:47

你确定问题在这里吗?

你不是在其他地方漏掉记忆吗?

OutOfMemoryException可以从任何地方抛出到内存分配中,这可能只是发生在这里的巧合。

尝试在内存分析器中分析应用程序,看看是否保存了一些会导致内存“泄漏”的引用。

尝试从您的测试机器中删除尽可能多的RAM (取决于操作系统,在XP上尽量减少到256/128 MB ),并多次运行重复用例(不一定只是运行此代码的用例)。

票数 3
EN

Stack Overflow用户

发布于 2010-02-12 16:02:41

取决于_tabs的大小,您通过sr.ReadToEnd()读取整个序列化流的事实可能是导致它的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2253043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档