c# – 使用RuntimeHelpers.PrepareMethod()进行预JIT的问题

我正在探索使用RuntimeHelpers.PrepareMethod()来减少具有大量UI库的瘦客户端应用程序的启动时间

我创建了一个JIT辅助类来在后台线程上运行并遍历类型或程序集的方法并在它们上调用PrepareMethod

首先,这样做有什么缺点吗? (我并不是说JIT整个应用程序,我的意思是只有重型库,例如Infragistics,DevExpress和代表WPF中窗口类的类)

其次,无论如何确定方法是否已被JIT编辑? (虽然我没有注意到多次意外调用它有任何延迟或问题)

最后,如果我在后台线程上执行JIT,而另一个线程调用当前正在进行JIT编辑的方法,会发生什么?

最佳答案 因为你所要求的是高度依赖于实现的,所以没有确定的答案…我希望在它被JIT时对某个方法进行某种锁定……但除了深入研究特定的.NET版本等之外这仍然是猜测……

BTW:在相应的MethodDesc上有一个名为IsJitted的(非公共)字段,JIT编译器在jitting后设置为true …有关更多信息,请参阅here

点赞