由于JIT_MethodAccessCheck,编译的表达式树很慢

时间:2015-04-01 17:38:36

标签: c# performance expression-trees

我们使用已编译的表达式树动态生成代码;我们在运行时只能获得的一些信息使我们能够(理论上)编写更简单,更快速的代码。 在许多情况下,我们确实获得了性能提升。

然而,在某些情况下,我们会受到性能影响。在这种情况下,Visual Studio Profiler显示性能的差异是由于这种方法(在静态编译的代码中根本不显示)

JIT_MethodAccessCheck

这种方法有什么作用? (谷歌没有太多话要说)。 我可以以某种方式优化它吗?

2 个答案:

答案 0 :(得分:0)

JIT_MethodAccessCheck方法执行安全检查,例如SecurityTransparentAPTCA和@xanatos提到的类访问检查。

班级访问权限检查包括SecurityCriticalSecuritySafeCritical,附加的分析器旁路和LinkDemand。更多细节可以在coreclr jithelpers.cpp找到。

由于coreclr与CLR兼容,我们可以安全地假设两者中的检查方式相同。

答案 1 :(得分:0)

使用此答案中的代码片段来编译表达式树,它可以消除跨方法边界的检查:

Why is JIT_MethodAccessAllowedBySecurity taking so much time?