-1

Can anyone tell me if it is a good idea to accept nullable parameters for a function and then setting the parameter to null after using it? Would this be a good programming practice to free up unused resources? Ex:

public static bool SendEmail(MailAddressCollection? To, string Subject, string Body)
{
    // use the values stored in To, Subject, and Body to send the message.
    To = null;
}
4

3 回答 3

4

,这不是一个好主意。你所做的没有实际影响。您设置为 null 的唯一变量是该方法的本地变量。无论如何,该变量将自动超出范围。

相反,如果您将该对象作为参数,则意味着无论如何在当前方法之外对该对象都有引用,并且您不会影响该引用。所以你在方法中做任何事情根本没有帮助GC。在这方面产生任何非局部影响的唯一方法是将所有参数传递为ref,从而能够将传递的变量设置为空。然而,这将是绝对可怕的,因为每个看似无辜的方法调用都可能会破坏以后假定为非空的引用。

通常,在大多数应用程序中您应该做的不是考虑它。GC 在检测未使用内存方面要好得多,因为它可以检查堆栈中的引用,并且可以访问 JIT 编译器发出的相关元数据,而这些元数据是您看不到的。

于 2013-06-15T07:07:02.303 回答
1

不,这不对。你有一个 GC 来为你处理这个问题。您不是使用非托管语言,您不需要处置资源(IDisposable当然,除非它们是)。

于 2013-06-15T06:55:53.363 回答
1

不,这在 .NET 等托管环境中是一种不好的做法。.NET 中的垃圾收集器可以自动收集没有引用的对象并从中释放内存。

但也有极少数例外。您可以手动设置对 null 的引用并显式调用 GC:

public static void ForceGC(ref object obj) {        
    obj = null;
    GC.Collect();
}
于 2013-06-15T07:03:42.277 回答