1

我有一个具有多个帮助程序类的 ASP.NET 应用程序。我有点担心内存泄漏。每次我想使用辅助类成员函数时,我都会这样称呼它们

new SampleHandler().DoFunction();

因为它对创建的对象没有任何强引用,我可以保证 GC 是否会为创建的对象清除内存吗?
由于我很有可能不会在页面中再次使用该对象,因此我开始像这样编码。

注意:以相同方式执行的代码隐藏文件中对属于不同帮助类的各种成员函数的多次调用

4

2 回答 2

8

是的,由于没有其他未完成的引用,由创建的实例new SampleHandler()将有资格在DoFunction()返回后立即收集。

但是,不能保证 GC 像往常一样收集该实例的时间。

于 2013-10-17T07:05:02.933 回答
4

垃圾收集器将处理未使用的引用。所以你不必担心内存泄漏。但是,如果您非常快速地创建“垃圾”对象,您可能会有暂时的内存压力。

但是如果你不需要实例或者实例是可交换的,你应该考虑制作方法static

public class SampleHandler
{
    public static void DoFunction()
    {
        // ...
    }
}

然后你会调用它:

SampleHandler.DoFunction();

ASP.NET 中的静态方法没有问题,即使它是多线程环境。但是你应该小心静态字段。

于 2013-10-17T07:07:44.617 回答