繁体   English   中英

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

[英]Are there any considerations needed to be taken running your .net program on x64 vs x86?

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

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

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

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

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

  • 包含常量大小的指针算法。

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

  • 将IntPtr转换为Int32

此外,默认文件位置。

本文有很多值得注意的好问题: 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”。 太糟糕了。

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

  • 也完全赞同torial答案 :-)

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

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

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

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

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

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

关心马西莫

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM