0

私はList<Pupil>、Pupil オブジェクトがイベント Finish を発生させるたびに and を持っています。その生徒は から削除されList<Pupil>ます。IDisposableインターフェースを実装した瞳孔オブジェクト。

イベントを終了します。

    private void pupil_Finish(Pupilsender)
    {
        lock (this.pupilList)
        {
            if (this.pupilList.Contains(sender))
            {
                this.pupilList.Remove(sender);

                sender.Dispose();
            }
        }
    }

では、メソッドを呼び出した後、this.pupilList.Remove(sender)使用する必要がありますsender.Disposeか? アプリケーションのメモリを節約したいアクションの目的。

ありがとう!

4

3 に答える 3

1

ディスポーザブルは実際にはメモリを節約するためではなく、管理されていないリソースを明示的に解放するためにあります。オブジェクトのヒープ メモリは、GC によってのみ解放されます。したがって、呼び出しDisposeによってヒープ上のオブジェクトが削除されることはありません。

于 2012-05-21T08:02:01.910 に答える
0

通常のパターンでは、 がPupilそのDisposeプロシージャを使用して、サブスクライブしていたすべてのイベントからサブスクライブを解除し、場合によっては、自分で使用するために貸し出したオブジェクトをDisposed処理する必要があることを他のオブジェクトに通知するイベントを発生させます。がイベントとして動作することになっている場合、 を呼び出す必要はありません。なぜなら、イベントが最初に発生する理由は、それが既に破棄されているからです。そうは言っても、イベント ハンドラーはおそらくサブスクリプションをキャンセルする必要がありますが、現在はキャンセルしていません。IDisposablePupilFinishDisposedsender.DisposesenderFinish

于 2012-05-21T17:53:52.630 に答える
0

送信者の生徒がどこにも参照されていない場合は、Dispose を呼び出す必要があります。そうでなければそうではありません。

于 2012-05-21T07:51:25.580 に答える