2010-05-03 70 views
1

.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等,即超過一秒。

我現在更驚訝了(事件發生在日誌記錄部分之後)。

+0

也許'RaiseEvent'是唯一對接收到的數據做任何事情的語句,所以如果刪除它,(部分)計算會被優化掉? – Thomas 2010-05-03 07:20:17

+0

此Raised事件的事件處理程序只顯示一個Msgbox。進一步更新,如果我刪除Msgbox並把Logger.Debug性能得到改善。主要觀點是RaiseEvent在記錄之後被調用,然後它如何影響已經執行的內容。 – 2010-05-03 07:26:38

+0

它不應該影響以前執行的代碼。由於時間超過1秒,您可能需要嘗試單步執行「某些任務」,以查看是否有任何操作在進行。 – 2010-05-11 13:40:34

回答

1

嘗試在控制檯應用程序中使用相同的方法。控制檯應用程序使用更少的資源

在這裏您可以識別確切的問題。

+0

謝謝。問題太多了。從來沒有想過這個簡單的方法。 – 2010-05-25 05:41:52

相關問題