64位.NET的优缺点是什么?

12

正如这个问题/评论中所提到的,从32位.NET迁移到64位.NET存在某些不利之处。

可能最大的优势是64位世界中更大的进程地址空间,但还有哪些值得注意的优缺点呢?

3个回答

6

我发现对于某些计算密集型(数值计算)应用程序,它可以明显地提高速度(在我的经验中大约快了4倍)。最好的是,在纯托管情况下,它是免费的。你甚至不需要重新编译任何东西就能获得好处。另外,我听说x64 JIT有更积极的优化。

最大的缺点可能是无法在进程中加载32位COM组件。


5
你的应用程序可能会更快,也可能不会。我看到一些应用程序有所改进,但其他应用程序没有。这取决于你的应用程序在多大程度上利用了64位(数学)操作,以及这是否抵消了x64使用的更大的数据和代码,因此必须将其加载到指令和数据缓存中才能执行。 链接 这值得一读。它虽然有些陈旧(.NET 2.0),但许多内容仍然适用;指针大小、COM互操作等: 将32位托管代码迁移到64位 另外,即使在x64上,CLR也有一个单个对象大小限制为2Gb。这对99%的情况都不是问题,但如果你正在转向x64,那么可能是因为你可能正在处理大型数据集。请参阅此处以获取更多讨论:

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

这篇文章提供了许多关于编译器开关等方面的好建议。


2
默认情况下不安装64位编译器。此帖讨论的是.NET应用程序。这只适用于本机C++编译器,而不适用于VB.NET/C#。 - Mehrdad Afshari
这只是一个附注。我已经在上面澄清了。 - Ade Miller

1

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)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接