WEB开发网
开发学院软件开发C语言 C#4.0初探:dynamic 关键字 阅读

C#4.0初探:dynamic 关键字

 2009-05-29 08:31:21 来源:WEB开发网   
核心提示: 代码调用了ToString方法,但编译器生成了两份缓存,C#4.0初探:dynamic 关键字(7),如果是在循环中:代码:using System; namespace Xianfen.Net.TestDynamic { class Program { static void Main(

代码调用了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下测试通过)

URL: http://www.xianfen.net/

上一页  2 3 4 5 6 7 

Tags:初探 dynamic 关键字

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接