.NET中预先装配程序集的优点和缺点是什么?

fun*_*ing 7 .net c# jit

.NET中预先装配程序集的优点和缺点是什么?

我听说预先咬合会提高性能.什么时候我应该预先jit,什么时候不应该预先jit?

Pau*_*sik 8

"预先评估"或预编译将在启动时提高性能,因为您将跳过该步骤.每次应用程序及其库加载时.NET JIT的原因是它可以在许多平台和体系结构上运行,并且无需管理构建就可以实现最佳优化.

因此,您必须权衡管理员是否值得在应用启动和库加载时节省几秒钟.我认为这样做最常见的用例是服务器安装,你倾向于管理很少的机器,环境非常稳定.例如,您不会为客户端应用程序进行预编译,因为目标环境的可预测性要低得多.

  • 我认为,如果你认为你的应用程序经常重启或者经常加载/卸载库(很少发生),那真的是值得的.否则我会避免它,因为它增加了另一个部署问题.请记住,一旦您的应用程序启动并运行,它与JIT如何进行无关. (2认同)

Ted*_*sen 5

“ PRE-JIT”通过NGen(从CIL到本机映像的预编译过程)完成。它将把已编译的.NET代码从与平台无关的中间状态转换为特定于平台的阶段。用简单的英语,它将可以在Windows,Mac和Linux上同时运行32位和64位的.NET应用程序转换为只能在其中之一上运行的老式EXE文件

.NET应用程序被编译成称为MSIL的中间二进制格式,该格式独立于平台。这意味着该应用程序可以由任何平台上的任何CPU运行,只要该平台支持.NET。.NET在执行过程中执行的操作称为JIT。JIT将在每次执行之前将其实际使用之前编译一次代码。这也意味着将仅编译使用的代码。

NGen可以提高您的应用程序的性能(主要是启动时间),有时会非常明显。只要目标正确的平台,NGen几乎对任何东西都是安全的。例如,如果您的应用程序使用32位DLL文件,则不应将其生成为64位,如果其他应用程序正在使用DLL文件,则不应对其进行生成。

我建议安装后而不是在分发之前运行NGen ,以便您知道该应用程序将在目标计算机上运行。