程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 4.0初探 - dynamic關鍵字(6)

C# 4.0初探 - dynamic關鍵字(6)

編輯:關於C語言

代碼調用了ToString方法,但編譯器生成了兩份緩存。

如果是在循環中:

代碼:

using System;

namespace Xianfen.Net.TestDynamic
{
    class Program
    {
        static void Main()
        {
            dynamic d = 5;

            for (int i = 0; i < 100; i++)
            {
                d.ToString();
            }
        }
    }
}

反編譯代碼:

internal class Program
{
    // Methods
    private static void Main()
    {
        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(new CSharpInvokeMemberBinder(CSharpCallFlags.None, "ToString", typeof(Program), null, new CSharpArgumentInfo[] { new CSharpArgumentInfo(CSharpArgumentInfoFlags.None, null) }));
            }
             <Main>o__SiteContainer0.<>p__Site1.Target (<Main>o__SiteContainer0.<>p__Site1, d);
        }
    }

    // Nested Types
    [CompilerGenerated]
    private static class <Main>o__SiteContainer0
    {
        // FIElds
        public static CallSite<Action<CallSite, object>> <>p__Site1;
    }
}

可見在循環中,相同的操作做了一次緩存;但非循環環境下, 調用一次會緩存一次,猜測原因是,重復調用一個方法的次數不會太多,並且很 多情況准確查找起來比較困難。

(以上代碼在VS2010Beta1下測試通過)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved