64位.NET性能调优

时间:2008-08-18 10:35:15

标签: .net performance optimization 64-bit jit

我知道.NETJIT编译到您运行应用程序之前运行的体系结构,但JIT编译器是否针对64位体系结构进行了优化?

在编写将在64bit system上运行的应用时,是否有任何需要完成或考虑的事项? (即使用Int64会提高性能并且JIT编译器会自动使Int64在32位系统上运行吗?)

5 个答案:

答案 0 :(得分:14)

来自32位的64bit JIT is different,所以我预计输出会有一些差异 - 但我不会为了那个而切换到64位,我不希望获得太多的速度(如果有的话) )在CPU时间内切换到64位。

如果您的应用程序使用大量内存并且PC有足够的RAM来跟上它,您会注意到性能的大幅提升。我发现当你使用大约1.6gb时,32位.NET应用程序倾向于开始丢失内存异常,但是由于paging很长时间之前它们开始捶打磁盘 - 所以你结束了我/ O bound。

基本上,如果你的瓶颈是CPU,则64位不太可能有所帮助。如果你的瓶颈是记忆,那么你应该看到一个很大的进步。

  

使用Int64是否会提高性能,JIT编译器是否会自动使Int64在32位系统上运行

Int64已经在32位和64位系统上运行,但在64位运行速度更快。因此,如果您主要使用Int64进行数字运算,那么在64位系统上运行应该会有所帮助。

最重要的是measure你的表现。

答案 1 :(得分:9)

This是一篇关于这个主题的好文章,由一位参与64位JIT工作的人撰写。基本上,除非你绝对需要64位可以提供的地址空间,或者需要进行64位数学运算,否则你可能会失去性能。由于指针较大,例如缓存有效减半。

答案 2 :(得分:6)

我注意到64位速度慢了很多。

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

例如在.NET 3.5中,32位JIT将使用结构作为参数内联函数调用,但64位JIT不会。

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

答案 3 :(得分:3)

总之,如果

,则仅使用64位
  1. 你需要额外的记忆,而且无法绕过它。
  2. 你编程,例如科学应用程序,需要提高数学精度
  3. 在所有其他方面,截至今天,.NET中的64位编译器是一步之遥。

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

答案 4 :(得分:0)

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

最重要的是,在测量之前不要试图改善某些东西的性能。特别是,您应该分析代码以确定性能瓶颈的位置。