我有一个具有多个帮助程序类的ASP.NET应用程序。我有点担心内存泄漏。每当我想使用帮助者类成员函数时,我就像这样称呼它们
new SampleHandler().DoFunction();
由于它没有对创建的对象有任何强引用,我可以保证GC是否会清除所创建对象的内存?
由于我很有机会在页面中再次使用该对象,因此我开始编码。
注意:在以相同方式执行的代码隐藏文件中,对属于不同帮助程序类的各种成员函数进行了大量调用。
答案 0 :(得分:8)
是的,由于没有其他未完成的引用,new SampleHandler()
创建的实例一旦DoFunction()
返回就有资格收集。
但是,通常情况下,GC无法保证GC收集该实例的时间。
答案 1 :(得分:4)
垃圾收集器将处理未使用的引用。所以你不必担心内存泄漏。但是如果你非常快地创建“垃圾”对象,你可能会产生暂时的记忆压力。
但是如果你不需要实例或实例是可交换的,你应该考虑制作方法static
。
public class SampleHandler
{
public static void DoFunction()
{
// ...
}
}
然后你会称之为:
SampleHandler.DoFunction();
ASP.NET中的静态方法没有问题,即使它是一个多线程环境。但是你应该小心静态字段。