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

Does using methods from internal classes without object initialization using new keyword cause memory leak in C# Winforms

我经常看到代码中使用了以下模式。当用于大量字符串和字符串连接操作(对不同大小的字符串进行数百万次操作)时,这是否会导致某种形式的内存泄漏。

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

实现 CommonPattern 的 class 看起来像这样(在归结为与问题相关的代码之后):

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。但具体我想知道上面的情况是否会导致内存泄漏。

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