64位.NET性能调优

时间:2020-03-05 18:40:20  来源:igfitidea点击:

我知道.NET是在应用运行之前将JIT编译为我们正在运行的体系结构的,但是JIT编译器是否针对64位体系结构进行了优化?

对将在" 64位系统"上运行的应用进行编程时,是否需要做任何事情或者考虑什么? (即使用Int64是否会提高性能,并且JIT编译器会自动使Int64在32位系统上运行吗?)

解决方案

回答

无论体系结构是32位还是64位,性能瓶颈都将相同。性能问题往往是次优算法的结果,在32位和64位类型之间进行选择不会显着影响性能。

最重要的是,在测量之前,请勿尝试提高某些产品的性能。特别是,我们应该分析代码以确定性能瓶颈在哪里。

回答

64位的JIT与32位的JIT不同,因此我希望输出会有所不同,但我不会为此而切换到64位,并且我也不希望在CPU时间上获得很大的速度(如果有)切换到64位。

如果应用程序使用大量内存,并且PC拥有足够的RAM来跟上它,我们将发现性能上的显着提高。我发现32位.NET应用程序趋向于在使用1.6GB左右时开始抛出内存异常,但是由于在此之前分页很久,它们开始对磁盘产生冲击,因此我们最终受I / O约束。

基本上,如果瓶颈是CPU,则64位不太可能提供帮助。如果瓶颈是内存,那么我们应该会看到很大的进步。

Will using Int64 improve performance and will the JIT compiler automatically make Int64 work on 32bit systems

Int64已经可以在32位和64位系统上运行,但是在64位上运行速度会更快。因此,如果我们大多数时候都在使用Int64进行数字运算,那么在64位系统上运行应该会有所帮助。

最重要的是衡量表现。

回答

这是一篇有关64位JIT的研究人员撰写的有关该主题的好文章。基本上,除非我们绝对需要64位可以提供的地址空间,或者需要执行64位数学运算,否则我们可能会失去性能。例如,随着指针变大,缓存将有效地减半。

回答

我注意到64位要慢很多。

如前所述,64位JIT编译器的行为与x86 JIT编译器不同。 x86编译器将利用x64不会进行的某些优化。

例如,在.NET 3.5中,32位JIT将内联函数调用以结构作为参数,而64位JIT则不是。

在生产代码中,我已经看到x86构建的运行速度比x64构建快20%(没有其他更改)

回答

总结一下,只有在以下情况下才使用64位:

  • 我们需要额外的内存,无法解决。
  • 我们编程例如科学应用程序,需要提高数学精度

在所有其他方面,到今天为止,.NET中的64位编译器已经向下发展了一步。

.NET编译器中完成的性能优化是一个大问题。