【问题标题】:Windows Service - migration to 64-bit. Steps in order to achieve '64-bit benefits'Windows 服务 - 迁移到 64 位。实现“64 位优势”的步骤
【发布时间】:2014-01-27 12:43:31
【问题描述】:

我有自己的旧 Windows 服务 (.Net 3.5),它在 32 位 Windows 上运行。现在我们有一个 x64 Windows Server 2012,并且想迁移这个服务。

我的问题是:我是否应该对这个 Windows 服务做一些特别的事情以实现 64 位框架的“所有好处”?我的意思是 - 我应该在 Visual Studio 2010 中构建/编译它的过程中设置一些选项(项目/解决方案属性)。或者是其他东西 ?或者我不需要做任何事情——它本身会使用 64 位框架,不管它是如何构建的。

【问题讨论】:

    标签: c# visual-studio-2010 windows-services 64-bit


    【解决方案1】:

    这取决于构建目标:

    • 如果平台目标是 x86,它将始终作为 32 位可执行文件运行(或根本不运行)
    • 如果平台目标是x64,它将始终作为 64 位可执行文件运行(或根本不运行)
    • 如果平台目标是Any CPU 没有启用“首选 32 位”,它将尽可能以 64 位运行,否则以 32 位运行
    • 如果平台目标是Any CPU “首选 32 位”启用,它将尽可能以 32 位运行,否则以 64 位运行

    您可以使用Environment.Is64BitProcess 来检查您的应用程序是如何运行的(或者只是查看任务管理器)。

    对于您的方案,Any CPU 没有“首选 32 位”似乎是正确的选择。

    【讨论】:

      【解决方案2】:

      由于这是作为 3.5 项目开始的,不,您可能不需要更改任何内容。重要的设置是项目 + 属性、构建选项卡、平台目标设置。旧版 Visual Studio 中的默认设置是 AnyCPU。就像它所说的那样,它可以在任何 CPU 上运行,因此您可以在 64 位操作系统上获得 64 位进程。如果它是“x86”(或选中了 Prefer 32-bit 复选框),那么您强制它以 32 位模式运行。

      实际上并不重要,64 位进程的唯一好处是它可以消耗更多的内存。远远超过 32 位进程限制的 2 GB。服务不应该对机器产生这种影响。

      【讨论】:

      • 还有很多其他的不同——例如完全不同的 JIT 和 GC。我悄悄地举起手说“我的服务使用了 很多 比这更多的内存......有充分的理由”。哎呀,SQL Server 是“一项服务”——您当然不会将其限制为 2GB/3GB。
      • 呃,他们仍然 jit 代码和收集垃圾,这没什么不同。不太确定您的 SE 数据库机器是否具有代表性:)
      • 在很多情况下,抖动工作方式的差异、问题适合或不适合 64 位算术的差异以及其他差异使 64 位大获全胜.我有一段代码在 64 位上的运行速度比 32 位快 6-8 倍,有时甚至更多;现在它一直针对 64 位使用进行了优化,因此它不是一个具有代表性的示例,但它确实是证明的例外。也就是说,相反的情况也经常发生。使用较小的内存可以使 32 位代码比 64 位更快,即使在 64 位上运行也是如此。
      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 2014-08-13
      • 1970-01-01
      • 2017-03-08
      • 2011-09-07
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多