微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 在方法调用之间缓存哪些(如果有的话)本地定义的委托?

这在我的另一个问题中提到过,我认为将它添加到记录中可能会有用.在下面的程序中,本地定义的委托(如果有的话)在调用Work方法之间缓存,而不是每次都从头开始创建?
namespace Example
{
    class Dummy
    {
        public int age;
    }

    class Program
    {
        private int field = 10;

        static void Main(string[] args)
        {
            var p = new Program();

            while (true)
            {
                p.Work();
            }
        }

        void Work()
        {
            int local = 20;

            Action a1 = () => Console.WriteLine(field);
            Action a2 = () => Console.WriteLine(local);
            Action a3 = () => Console.WriteLine(this.ToString());
            Action a4 = () => Console.WriteLine(default(int));
            Func<Dummy,Dummy,bool> dummyAgeMatch = (l,r) => l.age == r.age;

            a1.Invoke();
            a2.Invoke();
            a3.Invoke();
            a4.Invoke();
            dummyAgeMatch.Invoke(new Dummy() { age = 1 },new Dummy(){ age = 2 });
        }
    }
}

解决方法

根据Reflector显示内容,最后两个(a4和dummyAgeMatch)由MS C#3.0编译器缓存(在我的特定构建中称为“CS $<> 9_CachedAnonymousMethodDelegate5”和“CS $<> 9_CachedAnonymousMethodDelegate6”的字段中) ).

这些可以缓存,而显然其他的依赖于捕获的变量.

我不相信规范要求行为,但Mono编译器的行为方式大致相同(使用不同的变量名称).

原文地址:https://www.jb51.cc/csharp/91886.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐