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

前端之家收集整理的这篇文章主要介绍了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.f2er.com/csharp/91886.html

猜你在找的C#相关文章