代码之家  ›  专栏  ›  技术社区  ›  AngryHacker

部署时,便携式和Win-X64有什么区别?

  •  1
  • AngryHacker  · 技术社区  · 6 年前

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

    由于JIT需要将代码编译到特定的体系结构,因此在可移植的情况下启动站点需要更长的时间吗?还有别的吗?

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  1
  •   ajawad987    6 年前

    编辑-简短回答

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

    如果你选择 x64 应用程序不会因为编译而放慢速度,因为编译过程已经由生成计算机(您的笔记本电脑)上的发布过程完成。


    原始答案

    当你选择 Portable 发布选项,您将获得一个能够在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