在.NET中使用RaiseEvent是否有任何性能開銷?在.NET中使用RaiseEvent是否有任何性能開銷?
我有一個類似於下面的代碼。
Dim _startTick As Integer = Environment.TickCount
'Do some Task'
Dim duration As Integer = Environment.TickCount - _startTick
Logger.Debug("Time taken: {0}", duration)
RaiseEvent Datareceived()
上面的代碼返回:
Time taken: 1200
Time taken: 1400
但如果我刪除RaiseEvent
它返回:
Time taken: 110
Time taken: 121
我很奇怪的時間記錄拍攝後RaiseEvent
被調用。它如何影響總時間?
我正在關注.NET Compact Framework。
在事件處理程序中,我給了一個MsgBox。當我刪除消息框時,它現在將時間顯示爲110,121等,即少於500毫秒。如果我將Msgbox放回到事件處理程序中,它將顯示1200,1400等,即超過一秒。
我現在更驚訝了(事件發生在日誌記錄部分之後)。
也許'RaiseEvent'是唯一對接收到的數據做任何事情的語句,所以如果刪除它,(部分)計算會被優化掉? – Thomas 2010-05-03 07:20:17
此Raised事件的事件處理程序只顯示一個Msgbox。進一步更新,如果我刪除Msgbox並把Logger.Debug性能得到改善。主要觀點是RaiseEvent在記錄之後被調用,然後它如何影響已經執行的內容。 – 2010-05-03 07:26:38
它不應該影響以前執行的代碼。由於時間超過1秒,您可能需要嘗試單步執行「某些任務」,以查看是否有任何操作在進行。 – 2010-05-11 13:40:34