2

イベントはどれくらい遅いですか?私はストリーミング XML パーサー (無制限の不完全なドキュメントを処理できる) を作成しました。イベントを切り離し、代わりにインターフェイスを使用することで、速度が大幅に向上しました。

他に戦争の話を持っている人はいますか?

(ここでワームの GC 缶を開けないようにしましょう。壊れていることは誰もが知っています :))

4

5 に答える 5

20

イベントの発生はデリゲート呼び出しであり、仮想呼び出しよりも少し遅くなります

代替テキスト
(ソース: microsoft.com )

ただし、サブスクライバー/パブリッシャー/オブザーバー/オブザーバブルのシナリオのインターフェイスを扱うことは、イベントを使用するよりも面倒です。

于 2008-10-02T13:06:42.160 に答える
3

イベントは実際には単なるデリゲートです。私の記憶では、2.0 CLR で大幅に高速化されました。イベントをインターフェイスに置き換えると、コードが大幅に高速化されたことに驚きました。私の経験ではかなり高速であり、XML を扱っている場合は、イベント呼び出しがボトルネックになるとは予想していませんでした。

あなたのコードは、定期的にイベントをサブスクライブしたり、サブスクライブ解除したりしていましたか? 特定のドキュメントを解析するときに行われたイベント呼び出しの数を示していますか?

于 2008-10-02T13:00:33.237 に答える
0

デリゲートはメソッドのリストであり、理論的には複数のハンドラーを呼び出すことができるため、仮想メソッド呼び出しと比較してわずかにオーバーヘッドがあります。

于 2008-10-02T13:05:35.953 に答える
0

イベントは、単純な関数呼び出しよりも確実に遅くなります。正確にどれだけ遅いかはわかりませんが、大幅に遅くなります。また、デリゲートを「中間」の場所に移動することもできます。.NET イベント システムはデリゲートを使用しますが、イベント システム全体よりもデリゲートを介して直接メソッドを呼び出す方が高速です。

于 2008-10-02T13:03:40.793 に答える
-1

呼び出しにリフレクションが含まれていない場合、オーバーヘッドはごくわずかだと思います。もちろん、仮定は間違っている可能性があります。これを実証するためのマイクロベンチマークはありますか?

于 2008-10-02T13:02:52.967 に答える