在x64 vs x86上运行.net程序是否需要考虑?

时间:2008-09-28 02:31:27

标签: .net x86 64-bit

我认为在制作.Net程序时,体系结构类型(x86 vs x64)会被抽象出来,但还有其他任何可能导致问题的注意事项吗?

7 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:11)

来自MSDN doco,以及其他考虑因素:

  

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

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

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

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

  •   
  • 将IntPtr转换为Int32

  •   

此外,默认文件位置。

答案 2 :(得分:9)

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

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

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

  • C:\ Windows文件夹中的SysWow64可能会导致DLL不在需要的地方(我们遇到了这个带有第三方许可组件的问题)。

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

答案 3 :(得分:2)

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

  • 也完全赞同torialanswers! : - )

答案 4 :(得分:2)

MSDN已经提出了一些关于将32位应用程序移植到64位执行环境的问题的文章。

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

其他两位博主之前曾在CLR团队工作时撰写过有关64位开发的文章

答案 5 :(得分:1)

x64将允许您处理更多内存,但是在相同代码的情况下,它将使用比x86更多的内存。

答案 6 :(得分:0)

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

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

此致 马西莫