我认为在制作.Net程序时,体系结构类型(x86 vs x64)会被抽象出来,但还有其他任何可能导致问题的注意事项吗?
答案 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文章。
答案 4 :(得分:2)
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来获取特殊文件夹或注册表访问,则可能会出现一些问题,如已经指出的那样。
此致 马西莫