c# – 在方法调用之间缓存哪些(如果有的话)本地定义的委托?
发布时间:2020-12-15 04:22:40 所属栏目:百科 来源:网络整理
导读:这在我的另一个问题中提到过,我认为将它添加到记录中可能会有用.在下面的程序中,本地定义的委托(如果有的话)在调用Work方法之间缓存,而不是每次都从头开始创建? namespace Example{ class Dummy { public int age; } class Program { private int field = 1
这在我的另一个问题中提到过,我认为将它添加到记录中可能会有用.在下面的程序中,本地定义的委托(如果有的话)在调用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编译器的行为方式大致相同(使用不同的变量名称). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |