事件是å¦æ¯”C#中的虚拟/é‡å†™æ–¹æ³•æ›´æ˜“于缓存?

时间:2013-06-03 19:21:24

标签: c# performance events caching virtual-method

阅读cache-friendly code in this SO question,我想知é“在使用C#中的类时,触å‘和处ç†äº‹ä»¶æ˜¯å¦æ¯”覆盖方法更容易缓存(因为其中一个答案表明应该é¿å…虚拟方法,至少在C ++中),还是有比两ç§æ–¹æ³•æ›´å¥½çš„策略?

1 个答案:

答案 0 :(得分:4)

  

我想知é“在使用C#中的类时,触å‘和处ç†äº‹ä»¶æ˜¯å¦æ¯”覆盖方法更加缓存å‹å¥½

一般æ¥è¯´ï¼Œæ²¡æœ‰ã€‚事件将需è¦è°ƒç”¨ä¸€ä¸ªå•ç‹¬çš„类实例,该实例将ä½äºŽå•ç‹¬çš„内存ä½ç½®ã€‚与虚拟方法调用相比,这将具有相åŒï¼ˆæˆ–å¯èƒ½æ›´ç³Ÿï¼‰çš„缓存问题。

  

还是有比两ç§æ–¹æ³•æ›´å¥½çš„策略?

ä¸å¹¸çš„是,惯用的C#往往是éžç¼“å­˜å‹å¥½çš„。为了编写缓存å‹å¥½çš„C#代ç ï¼Œæ‚¨é€šå¸¸å¸Œæœ›ä½¿ç”¨struct而ä¸æ˜¯class,é¿å…虚拟方法,é¿å…事件,é¿å…代ç†ï¼ˆè‡³å°‘有关闭的代ç ï¼‰ç­‰ç­‰.Rico Mariani有一个很好的blog post on Value based programming详细讨论了许多这些问题。