【问题标题】:What are the pros/cons of 64 bit .NET?64 位 .NET 的优缺点是什么?
【发布时间】:2010-11-09 04:20:27
【问题描述】:

this question/comments 中所述,从 32 位 .NET 迁移到 64 位 .NET 时存在某些缺点。

可能最大的优势是 64 位世界中更大的进程地址空间,但还有哪些优点和缺点值得注意?

【问题讨论】:

    标签: .net 64-bit 32-bit


    【解决方案1】:

    64 位应用程序的运行速度并不总是比 32 位快。 下面的两篇博文谈到了它:
    https://blogs.msdn.microsoft.com/rmbyers/2009/06/09/anycpu-exes-are-usually-more-trouble-than-theyre-worth/

    更大的指针意味着更多的内存和 缓存消耗和数量 可用的 CPU 缓存字节数是 32 位和 64 位都一样 进程。

    http://blogs.msdn.com/ricom/archive/2009/06/10/visual-studio-why-is-there-no-64-bit-version.aspx

    进程的 64 位地址空间 不会帮助您处理页面 除了可能是间接的错误, 它肯定会伤害你 直接的方式,因为您的数据是 大。相比之下,64 位 操作系统可以帮到你很多! 如果您在一个 32 位应用程序上运行 64位操作系统然后你得到所有的4G 地址空间,所有这些都可能是 由物理内存支持(如果你有 RAM)即使没有你使用 64 位 自己指点。

    【讨论】:

      【解决方案2】:

      您的应用程序可能会或可能不会运行得更快。我已经看到了一些应用程序的改进,但没有看到其他应用程序。这取决于您的应用程序在多大程度上利用了 64 位(数学)运算,以及这是否会抵消 x64 使用的较大数据和代码,因此必须先加载到指令和数据缓存中才能执行。

      http://blogs.msdn.com/b/joshwil/archive/2006/07/18/670090.aspx

      这值得一读。它很旧(.NET 2.0),但仍然适用;指针大小、COM 互操作等:

      Migrating 32-bit Managed Code to 64-bit

      同样值得知道的是,即使在 x64 上,CLR 也有 2Gb 的单个对象大小限制。对于 99% 的场景来说,这不是问题,但如果您要迁移到 x64,大概是因为您可能正在处理大型数据集。有关更多讨论,请参见此处:

      Are C# Strings (and other .NET API's) limited to 2GB in size?

      所以。除非您的应用程序使用不适合 32 位内存的数据或大量使用 64 位操作,否则您可能看不到太多改进。

      另一个缺点是 Visual Studio for x64 应用程序有一些限制:

      • 编辑并继续不可用 用于 64 位调试。

      • 您不能在混合模式下调试,调用 从本机代码到托管代码,或 反之亦然,在 64 位代码中。

      见:http://msdn.microsoft.com/en-us/library/ms184681(VS.80).aspx

      注意:默认情况下不安装 64 位 C++ 编译器。您必须在安装过程中选择它们。

      我也刚刚发现了这个(因为我自己正在优化一个 x64 应用程序)。

      “在 64 位 Windows 上为 AMD64 移植和优化应用程序......”

      http://download.microsoft.com/download/5/b/5/5b5bec17-ea71-4653-9539-204a672f11cf/AMD64_PortApp.doc

      在编译器开关等方面有很多很好的指导。

      【讨论】:

      • “默认情况下未安装 64 位编译器”:OP 正在谈论 .NET 应用程序。这仅适用于原生 C++ 编译器,不适用于 VB.NET/C#。
      • 这是一个旁注。我已经在上面澄清了。
      【解决方案3】:

      对于一些计算量大(数字运算)的应用程序,我发现它明显更快(根据我的经验,速度快了 4 倍)。最好的事情是它在纯托管情况下是免费的。你甚至不需要重新编译任何东西来获得好处。另外,我听说 x64 JIT 有更积极的优化。

      最大的缺点可能是无法在进程中加载​​ 32 位 COM 组件。

      【讨论】:

        猜你喜欢
        • 2010-11-19
        • 2010-10-05
        • 2014-01-24
        • 2010-10-08
        • 2011-06-17
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多