使用内部类中的方法而没有使用new关键字进行对象初始化是否会导致C#Winforms中的内存泄漏

Ganesh Kamath-“疯狂代码”

我看到很多在代码中使用以下模式。当用于大量字符串和字符串串联操作(对大小不同的字符串进行数百万次操作)时,这是否会引起某种形式的内存泄漏。

pattern = (new CommonPattern(form)).ToString();

实现CommonPattern的类如下所示(简化为与问题相关的代码之后):

internal class CommonPattern {
    private string pattern;
    private TForm form;

    public CommonPattern(TForm form) {
        pattern = pattern + form.Name;
    }

    public override string ToString() {
        return pattern;
    }
}

我试过像这样添加一个析构函数。

~CommonDesignerPattern() { }

在小型项目中调用此代码时,我们看不到任何问题。但是,在具有150 – 200表格的项目中,我们看到了严重的问题–导致内存不足异常。

内存分析器没有帮助我找到此问题。当我进行分析时,它指出Stringbyte []是最终的可疑对象,这对我没有帮助。

我从事的是一个非常大的项目的一小部分,想了解上面代码中对new的调用是否会导致内存泄漏,并学习如何解决这个问题。

许多在线搜索结果都指向EventHandlers。但是我特别想知道上述情况是否会导致内存泄漏。

约翰·科纳

您发布的类代码中没有内存泄漏。字符串串联确实会创建其他字符串实例,但是,一旦这些字符串超出范围,它们最终将被垃圾收集器清除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章