2011-05-04 60 views
0

在我的wpf應用程序中,我使用了ThreadTime作爲bleow。C#ThreadTimer對象回調

TimerCallback tcb = new TimerCallback(TimerTask); 
tmrdetectchanges = new Timer(tcb, "", 100, tmrinterval); 

private void TimerTask(object data) 
{ 
    DetectChanges(); 
} 

我只是將「」傳遞給TimerTask參數,因爲我沒有使用它。對我的程序有沒有影響?在我的情況下,我是否需要使用這個參數?請指教。謝謝。

+0

我會使用String.Empty而不是「」。這是一個小小的優化。 – RedDeckWins 2011-05-04 02:19:35

+0

@Red:錯;他們編譯到相同的IL。 – SLaks 2011-05-04 02:24:38

回答

2

對你的程序幾乎沒有影響。有一些,但它是如此之小,以至於你甚至不會注意到它。當你傳入「」時,它會在堆上分配一個新的字符串對象,因此在某個時刻垃圾收集器將不得不找到它並釋放它,我相信它會比較快。

由於您未使用用戶數據參數,只需傳入null即可。完美有效並節省了那幾個CPU週期(用於通話和垃圾收集)

編輯:正如其他人已糾正我,真的幾乎幾乎沒有影響任何傳遞字符串而不是null。但是如果你傳入null,你仍然可以節省很少的CPU週期。傳入「」確實會生成一個額外的彙編指令(至少在主叫方),在你的情況下不會有任何用途

另請注意我只驗證在調試構建和發佈時可以優化,所以根本沒有區別。我敢肯定有人會糾正我,如果是這樣的話:)

+2

字符串文字未分配在堆上。 – 2011-05-04 02:24:13

+0

可以肯定的是,如果它們以對象類型的形式傳遞,它們最終會被裝箱。所以不會,但是當他們在回調中結束時,他們是。 – DXM 2011-05-04 02:26:09

+0

引用類型引用永遠不會被裝箱。 – 2011-05-04 02:29:24

3

MSDN

public delegate void TimerCallback(Object state) 

狀態

類型:System.Object

含 對象與此調用的方法相關的特定於應用程序的信息 10代表,或空

只需傳遞null即可。