0

この記事について質問があります: http://davybrion.com/blog/2009/09/event-subscribtion-and-memory-leaks-yet-again/

イベントで vb.net にメモリ リークがあります。メモリ プロファイラでアプリケーションを表示すると、問題はイベントであると表示されます :-(

今、この記事を見つけたので、試してみたいと思います。しかし、私は何delegate{}public event EventHandler<EventArgs> MyEvent = delegate { };意味するのか分かりません。

4

2 に答える 2

3

これは単なる空のイベントハンドラーであり、存在しますが(したがって、チェックする必要はありませんnull)、何もしません。次のコードスニペットは基本的に同じです。

// An anonymous delegate (your example):
public event EventHandler<EventArgs> MyEvent = delegate { };

// The same function using Lambda:
public event EventHandler<EventArgs> MyEvent = (sender, e) => { };

// A similar function using a named method:
public event EventHandler<EventArgs> MyEvent = Handler;
private static void Handler(object sender, EventArgs eventArgs) { }

VB.Netに翻訳:

Public Class SomeClass
    Public Event MyEvent(ByVal sender As Object, ByVal e As EventArgs)

    // The following sub is the empty delegate
    Private Sub Handler(ByVal sender As Object, ByVal e As EventArgs) _
                        Handles Me.MyEvent
        // empty
    End Sub
End Class
于 2012-09-07T09:49:05.210 に答える
1

これは、イベントに対してnullチェックを実行する必要を回避するための卑劣な方法にすぎません。基本的には、初期値として匿名メソッドを使用しますが、そのメソッドは何もしません。実装の詳細として、この空のデリゲートインスタンスは実際には静的フィールドにキャッシュされるため、インスタンスごとに大きな影響はありません。

について心配したくない場合は{}、そのままにしておきます。

public event EventHandler MyEvent;

そしてヌルチェックをしてください!

于 2012-09-07T09:47:02.193 に答える