2013-06-03 14 views
2

閱讀關於cache-friendly code in this SO question,我想知道在C#中使用類時,觸發和處理事件是否可以比覆蓋方法更容易緩存(因爲其中一個答案指出應避免使用虛方法,至少在C++中) ,還是比兩種方法都有更好的策略?事件是否比C#中的虛擬/重寫方法更容易緩存代碼?

+0

試着理解*爲什麼*虛擬緩存不友好。一旦你這樣做,很明顯事件甚至是不友好的。 – Jon

+0

他們解決完全不同的問題。我不知道它有多可比。也許你應該展示一個例子問題,然後解決它與事件和事件。那麼比較可以更有意義。 – Servy

+0

@Servy,因爲我創建了一個基類Form,它實現了在所有派生類中被覆蓋的虛方法,但是我想知道是否可以更好地觸發派生類中實現的事件而不是重寫方法。 –

回答

4

我想知道,如果發射和處理事件可以更高速緩存友好比C#

帶班工作時,一般無覆蓋的方法。事件將需要調用一個單獨的類實例,該實例將位於單獨的內存位置。這將與虛擬方法調用相比(或可能更糟糕)緩存問題。

還是比這兩種方法有更好的策略?

不幸的是,慣用C#往往是非緩存友好的。爲了編寫緩存友好的C#代碼,您通常希望使用struct而不是class,避免虛擬方法,避免事件,避免委託(至少有閉包)等。Rico Mariani有一個很好的blog post on Value based programming,它討論了這些問題中的很多詳情。