Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 部署时,便携式和win-x64之间有什么区别?_.net_Asp.net Core_.net Core_Asp.net Core 2.2 - Fatal编程技术网

.net 部署时,便携式和win-x64之间有什么区别?

.net 部署时,便携式和win-x64之间有什么区别?,.net,asp.net-core,.net-core,asp.net-core-2.2,.net,Asp.net Core,.net Core,Asp.net Core 2.2,我将我的代码部署到Windows Server 2016上的IIS,并试图了解在发布/设置/目标运行时下拉列表中选择Portable与win-x64之间的有效区别 由于JIT需要将代码编译到特定的体系结构,所以站点在Portable下启动会花费更长的时间吗?还有别的吗 编辑-简短回答 如果选择“可移植”,则每次启动应用程序时,都需要对实际执行的应用程序部分进行JIT编译。如果应用程序很大,则性能可能会受到影响 如果选择x64,则应用程序的编译速度不会减慢,因为编译过程已经在生成计算机(笔记本电脑

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

由于JIT需要将代码编译到特定的体系结构,所以站点在Portable下启动会花费更长的时间吗?还有别的吗


编辑-简短回答

如果选择“可移植”,则每次启动应用程序时,都需要对实际执行的应用程序部分进行JIT编译。如果应用程序很大,则性能可能会受到影响

如果选择
x64
,则应用程序的编译速度不会减慢,因为编译过程已经在生成计算机(笔记本电脑)上完成


原始答案

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

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

有关.NET运行时标识符的详细信息,请参见:


这里有一个关于JIT编译代码的好文档:

我对此表示怀疑。即使您使用
win-x64
,JIT编译仍然应该是执行的一部分。NET Native尚未应用于.NET Core,因此没有AOT来取代JIT。现在添加了一个复选框选项“Enable ReadyToRun compilation”,似乎更了解此回复的内容。而这只适用于特定于平台的目标。如果不进行检查,我不确定目标有什么不同。