C# - 使用可空类型作为参数

时间:2013-06-15 06:48:53

标签: c# .net performance garbage-collection

有人能告诉我是否接受函数的可空参数然后在使用后将参数设置为null是个好主意吗?这是一个很好的编程实践来释放未使用的资源吗?例如:

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;
}

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

不,不是。你有一个GC来照顾你。你不是一种非托管语言,你不需要处理资源(当然,除非它们是IDisposable)。

答案 2 :(得分:1)

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

但是极少数例外。您可以手动将引用设置为null并显式调用GC:

public static void ForceGC(ref object obj) {        
    obj = null;
    GC.Collect();
}