正如这个问题/评论中所提到的,从32位.NET迁移到64位.NET存在某些不利之处。
可能最大的优势是64位世界中更大的进程地址空间,但还有哪些值得注意的优缺点呢?
我发现对于某些计算密集型(数值计算)应用程序,它可以明显地提高速度(在我的经验中大约快了4倍)。最好的是,在纯托管情况下,它是免费的。你甚至不需要重新编译任何东西就能获得好处。另外,我听说x64 JIT有更积极的优化。
最大的缺点可能是无法在进程中加载32位COM组件。
C#字符串(以及其他.NET API)的大小限制为2GB吗?
因此,除非您的应用程序使用不适合32位内存或大量使用64位操作的数据,否则您可能看不到太多改进(如果有的话)。
另一个缺点是x64应用程序的Visual Studio存在一些限制:
无法进行64位调试时的编辑和继续。
在64位代码中,无法在混合模式下调试从本机代码到托管代码或反之亦然的调用。
请参见: http://msdn.microsoft.com/en-us/library/ms184681(VS.80).aspx
注意:64位C++编译器不是默认安装的。您必须在安装过程中选择它们。
我也刚刚发现了这个(因为我正在优化一个x64应用程序)。
“在AMD64上移植和优化应用程序...”
http://download.microsoft.com/download/5/b/5/5b5bec17-ea71-4653-9539-204a672f11cf/AMD64_PortApp.doc
这篇文章提供了许多关于编译器开关等方面的好建议。
64位应用程序并不总是比32位更快运行。以下两篇博客文章详细讨论了这个问题:
https://blogs.msdn.microsoft.com/rmbyers/2009/06/09/anycpu-exes-are-usually-more-trouble-than-theyre-worth/
更大的指针意味着更多的内存和缓存消耗,而对于32位和64位进程,可用CPU缓存的字节数是相同的。
http://blogs.msdn.com/ricom/archive/2009/06/10/visual-studio-why-is-there-no-64-bit-version.aspx
一个64位的进程地址空间对于页面错误并没有太大帮助,除非是以间接的方式,但它会直接影响你的数据大小。相比之下,64位操作系统可以给你很多帮助!如果你在64位操作系统上运行32位应用程序,则可以获得全部4G地址空间,即使你自己不使用64位指针,所有这些都可以由物理内存支持(如果你有足够的RAM)。