相同動態呼叫在迴圈中僅產生一個 CallSite 快取:
dynamic d = 5;
for (int i = 0; i < 100; i++) d.ToString();
object d = 5;
for (int i = 0; i < 100; i++)
{
if (<Main>o__SiteContainer0.<>p__Site1 == null)
<Main>o__SiteContainer0.<>p__Site1 = CallSite<Action<CallSite, object>>.Create(...);
<Main>o__SiteContainer0.<>p__Site1.Target(<Main>o__SiteContainer0.<>p__Site1, d);
}
靜態巢狀類別 <Main>o__SiteContainer0 持有唯一 CallSite 欄位 <>p__Site1。
連續兩行 d.ToString(); 會產生 <>p__Site1 與 <>p__Site2 兩個獨立快取。推測原因:編譯器難以靜態識別相同呼叫點,且非熱點路徑不值得投入複雜分析。
(測試環境:VS2010 Beta1)