我知道.NET
是JIT
编译到您运行应用程序之前运行的体系结构,但JIT编译器是否针对64位体系结构进行了优化?
在编写将在64bit system
上运行的应用时,是否有任何需要完成或考虑的事项? (即使用Int64会提高性能并且JIT编译器会自动使Int64在32位系统上运行吗?)
答案 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位在所有其他方面,截至今天,.NET中的64位编译器是一步之遥。
在.NET编译器中完成的性能优化是一个大问题。
答案 4 :(得分:0)
无论架构是32位还是64位,性能瓶颈都是相同的。性能问题往往是次优算法的结果 - 32位和64位类型之间的选择不会显着影响性能。
最重要的是,在测量之前不要试图改善某些东西的性能。特别是,您应该分析代码以确定性能瓶颈的位置。