-1

関数のnull許容パラメーターを受け入れ、それを使用した後にパラメーターを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;
}
4

3 に答える 3

4

いいえ、それは良い考えではありません。あなたがしていることは、実際的な影響はありません。null に設定する唯一の変数は、メソッドのローカル変数です。とにかく、その変数は自動的に範囲外になります。

逆に、そのオブジェクトを引数として取得した場合は、現在のメソッドの外にそのオブジェクトへの参照があり、その参照に影響を与えていないことを意味します。したがって、メソッド内でそのまま何かを実行しても、GC はまったく役に立ちません。この点でローカル以外の効果を持つ唯一の方法は、すべての引数を as としてref渡し、渡された変数を null に設定できるようにすることです。ただし、無害に見えるすべてのメソッド呼び出しが後で非 null と見なされる参照を台無しにする可能性があるため、これは絶対に恐ろしいことです。

一般に、ほとんどのアプリケーションですべきことは、それについて考えないことです。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 に答える