代码之家  ›  专栏  ›  技术社区  ›  Brian R. Bondy

在x64和x86上运行.NET程序需要考虑哪些因素?

  •  14
  • Brian R. Bondy  · 技术社区  · 16 年前

    我相信在制作.NET程序时,体系结构类型(x86和x64)是为您抽象出来的,但是还有其他可能导致问题的考虑吗?

    7 回复  |  直到 14 年前
        1
  •  19
  •   Corbin March    16 年前

    小心秘密进行win32调用的第三方COM库或第三方.NET库。那是我们头疼的地方。

        2
  •  11
  •   Mitch Wheat    14 年前

    MSDN doco 除其他考虑外:

    在许多情况下,程序集将在32位或64位CLR上运行相同的程序集。由64位clr运行时,程序行为不同的一些原因包括:

    • 包含以下成员的结构 根据平台改变尺寸, 例如任何指针类型。

    • 指针算术,包括 恒定尺寸。

    • 平台调用或COM不正确 使用Int32的声明 句柄而不是intptr。

    • 将intptr强制转换为int32

    另外,默认文件位置。

        3
  •  9
  •   torial    16 年前

    本文有许多值得注意的问题: http://osnews.com/story/20330/Windows_x64_Watch_List

    就我个人而言,我的老板有一台64位的Vista电脑,我的程序是32位的。我们遇到了以下问题:

    • 32位应用程序的注册表被隐藏(排序)到一个ww6432node文件夹中。并非所有用于在注册表中查找路径的应用程序都将位于该节点中(例如,SQL Server不会)。

    • C:\Windows文件夹中的SysWow64可能会导致DLL问题不在需要的位置(我们有第三方许可组件的此问题)。

    • 有时您需要的文件位于“C:\Program Files(x86)”中,而不是“C:\Program Files”。也很糟糕。

        4
  •  2
  •   Community CDub    8 年前
    • 在32位平台上,读写64位值是不安全的。读取64位值需要两个操作,这两个操作可能会被上下文切换中断。请参阅有关 Threading.Interlocked.Read 更多信息。

    • 也完全同意 torial answers !-)

        5
  •  2
  •   icelava    16 年前

    关于将32位应用程序移植到64位执行环境的问题,msdn发表了一篇小论文。

    http://msdn.microsoft.com/en-us/library/ms973190.aspx

    另外两位博主在clr团队工作时曾写过关于64位开发的文章。

        6
  •  1
  •   Mauricio Scheffer    16 年前

    X64将允许您处理更多的内存,但是给定相同的代码,它将使用比X86更多的内存。

        7
  •  0
  •   massimogentilini    16 年前

    根据我的经验,移植ASP.NET应用程序基本上是完美的。在32位机器和64位机器上运行,除了有更多的可用内存外,不会发生任何问题。这是因为已经提到的许多问题(注册表、线程等)都是由ASP.NET管理的,您需要正确修复这些问题才能在ASP.NET环境中运行。

    客户端(Windows窗体)也发生了同样的情况,但是如果您使用了一些“不安全”的API来获取特殊的文件夹或注册表访问权,那么就可能发生一些问题,正如已经指出的那样。

    当做 马西莫