【问题标题】:Are there any considerations needed to be taken running your .net program on x64 vs x86?在 x64 和 x86 上运行 .net 程序是否需要考虑任何因素?
【发布时间】:2008-09-28 02:31:26
【问题描述】:

我相信架构类型(x86 与 x64)在您制作 .Net 程序时已被抽象出来,但还有其他可能导致问题的考虑因素吗?

【问题讨论】:

    标签: .net x86 64-bit


    【解决方案1】:

    谨防秘密进行 win32 调用的第三方 COM 库或第三方 .NET 库。这就是我们最头疼的地方。

    【讨论】:

      【解决方案2】:

      来自MSDN doco,除其他注意事项外:

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

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

      • 指针算术包括 恒定的大小。

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

      • 将 IntPtr 转换为 Int32

      此外,默认文件位置。

      【讨论】:

        【解决方案3】:

        这篇文章有很多好问题需要注意: http://osnews.com/story/20330/Windows_x64_Watch_List

        就我个人而言,我的老板有一台 64 位 Vista 计算机,而我在 32 位模式下编程。我们遇到了以下问题:

        • 32 位应用程序的注册表被隐藏(某种程度上)到 Wow6432Node 文件夹中。并非您习惯于在注册表中查找路径的所有应用程序都将位于该节点中(例如,SQL Server 不会)。

        • C:\Windows 文件夹中的 SysWow64 可能会导致 DLL 不在需要的位置(我们在使用第 3 方许可组件时遇到了这个问题)。

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

        【讨论】:

          【解决方案4】:
          • 在 32 位平台上读取和写入 64 位值不是线程安全的。读取 64 位值需要两个操作,这些操作可能会被上下文切换中断。有关详细信息,请参阅 Threading.Interlocked.Read 上的 MSDN 文章。

          • 也完全同意torialanswers! :-)

          【讨论】:

            【解决方案5】:

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

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

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

            【讨论】:

              【解决方案6】:

              x64 将允许您寻址更多的内存,但给定相同的代码,它将使用比 x86 更多的内存。

              【讨论】:

                【解决方案7】:

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

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

                问候 马西莫

                【讨论】:

                  猜你喜欢
                  • 2011-01-08
                  • 2012-11-15
                  • 2010-12-08
                  • 2023-03-03
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-04-17
                  相关资源
                  最近更新 更多