部署时,Portable和win-x64有什么区别?

时间:2018-12-19 23:35:19

标签: .net asp.net-core .net-core asp.net-core-2.2

我将代码部署到Windows Server 2016上的IIS,并且试图了解在“发布/设置/目标运行时”下拉列表中选择Portablewin-x64之间的有效区别。

由于JIT需要将代码编译为特定的体系结构,因此该网站在可移植性下启动需要花费更长的时间吗?还有别的事吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

编辑-简短答案

如果选择 <AreaClosed data={stock} x={d => xScale(xStock(d))} y={d => yScale(yStock(d))} yScale={yScale} strokeWidth={1} stroke={'url(#gradient)'} fill={'url(#gradient)'} curve={curveMonotoneX} /> ,则每次启动应用程序时,都需要对应用程序实际执行的部分进行JIT编译。如果您的应用程序很大,则性能可能会受到影响。

如果您选择portable,则应用程序将不会因为编译过程而减慢速度,因为在构建计算机(您的便携式计算机)上的发布过程已经完成了该操作。


原始答案

选择x64发布选项时,您将获得一个能够在x86(32位)计算机和x64(64位)计算机上运行的软件包。选中可移植选项后,在应用程序启动时,随着应用程序保持运行,您将获得目标计算机(x64或x86)的JIT编译代码。但是,如果应用程序关闭,所有JIT编译的代码将丢失。编译后的代码位于内存中,直到应用程序进程结束。下次运行时,必须在使用JIT时再次对其进行编译。这样做的好处是您只需要分发一个程序包,即可在两台x86 / x64机器上运行。

另一种方法是生成多个程序包,但是对于要在其上分发应用程序的每个目标平台一个程序包。在这种情况下,您将获得已经编译的特定于计算机的程序包,即使在应用程序过程结束并稍后重新启动后,也不需要重新编译。在这种情况下,由于编译仅在构建服务器/机器上完成一次,因此您的应用程序运行速度似乎更快。但是,它确实会影响您的部署样式。

有关.NET运行时标识符的更多信息,请参见:https://docs.microsoft.com/en-us/dotnet/core/rid-catalog

关于JIT编译代码的好文档在这里:https://www.telerik.com/blogs/understanding-net-just-in-time-compilation