Dot-Net
.net 事件的性能影響
我們正在辦公室討論如何解決特定問題並提出使用事件(不是雙關語)。回應是負面的,理由是濫用,而且它們可能很昂貴。
我了解濫用背後的擔憂,並且我知道它們只是一個特殊的多播委託,但考慮到最多只有一個偵聽器的情況,為什麼在方法呼叫上使用事件被認為是“昂貴的”?
更新:
需要明確的是,這與任何特定實現無關,這是一個更普遍的問題,即在方法呼叫上使用事件的成本。
在您的場景中測試它 - 我想有很多很多因素會影響這一點,特別是當我們談論諸如方法/委託呼叫這樣相對成本較低的事情時。
使用不在調試器下的發布版本進行快速簡單的測試,在 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 萬次呼叫半秒,除非您期望在短時間內執行那麼多呼叫(在這種情況下,可能存在更基本的設計問題)。