我把通常的编译和JIT搞混了。并想用一个例子来问一下。
假设我们有一个正在运行的WinForms或WPF GUI应用程序。当我点击按钮时会发生JIT吗?换句话说,当事件发生在一个正在运行的.Net应用程序中时,编译是在那个时刻发生的(当我们单击按钮时),还是所有的即时编译都已经在执行期间发生了(当我们单击exe文件启动程序时)?
发布于 2021-04-13 15:54:12
默认情况下,JIT会发生..."just in time",即第一次访问方法时,因此:它可能在您第一次单击按钮时发生,但不会在下一次发生(除非您最终沿着不同的代码路径运行,并且其他方法需要JIT)。事件处理程序是方法,JIT对它们的工作方式没有区别。在最近的.NET版本中也有分层的JIT,这意味着第一个JIT很快,但并不是非常优化,但如果运行时检测到它被大量使用,它可能会花费一些额外的时间来提高性能。
根据构建机制的不同,还可以在提前构建(“AOT”)时执行JIT;如果您已经捕获了可以帮助其生成最佳代码的使用数据,则还可能涉及概要引导优化("PGO")。
https://stackoverflow.com/questions/67070721
复制相似问题