首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 4.0 新特性探秘 (五):dynamic 關鍵字非迴圈環境下的多重快取現象

     編輯:關於C語言

連續呼叫產生多個 CallSite


dynamic d = 5;
d.ToString(); // 第一次
d.ToString(); // 第二次

反編譯結果


object d = 5;
if (<Main>o__SiteContainer0.<>p__Site1 == null) 
    <Main>o__SiteContainer0.<>p__Site1 = CallSite<Action<CallSite, object>>.Create(...);
<Main>o__SiteContainer0.<>p__Site1.Target(...);

if (<Main>o__SiteContainer0.<>p__Site2 == null)
    <Main>o__SiteContainer0.<>p__Site2 = CallSite<Action<CallSite, object>>.Create(...);
<Main>o__SiteContainer0.<>p__Site2.Target(...);

巢狀類別擁有兩個靜態欄位 <>p__Site1、<>p__Site2。編譯器未合併相同簽章的動態呼叫,各自維護獨立快取。

影響

  • 增加靜態欄位數量,微幅擴大型別元數據。
  • 每個 CallSite 佔用記憶體,大量散落呼叫可能造成壓力。
  • 非熱點路徑影響有限,但高頻路徑建議手工快取或改用靜態型別。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved