Dot-Net

.net 事件的性能影響

  • August 12, 2012

我們正在辦公室討論如何解決特定問題並提出使用事件(不是雙關語)。回應是負面的,理由是濫用,而且它們可能很昂貴。

我了解濫用背後的擔憂,並且我知道它們只是一個特殊的多播委託,但考慮到最多只有一個偵聽器的情況,為什麼在方法呼叫上使用事件被認為是“昂貴的”?

更新:

需要明確的是,這與任何特定實現無關,這是一個更普遍的問題,即在方法呼叫上使用事件的成本。

在您的場景中測試它 - 我想有很多很多因素會影響這一點,特別是當我們談論諸如方法/委託呼叫這樣相對成本較低的事情時。

使用不在調試器下的發布版本進行快速簡單的測試,在 4.0 下編譯為“任何 cpu”,並在 64 位 Windows 7 上執行:

另一個編輯:哎呀,這是一個更好的結果。查看程式碼以了解其工作原理

10000000 direct reference calls     :   0.011 s
10000000 calls through an interface :   0.037 s
10000000 invocations of an event    :   0.067 s
10000000 calls through Action<int>  :   0.035 s

因此,在一千萬次呼叫的直接“無操作測試”中,一個事件增加了 0.474 秒 [編輯,現在在一台更好的機器上只有 0.026 ,但仍然大約翻倍]

我會更擔心設計的正確性,而不是每 1000 萬次呼叫半秒,除非您期望在短時間內執行那麼多呼叫(在這種情況下,可能存在更基本的設計問題)。

引用自:https://stackoverflow.com/questions/3847727