2008-08-18 55 views
10

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

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

回答

14

64bit JIT is different从32位的一个,所以我希望在输出的一些差异 - 但我不会切换到64位只是为了这一点,我不希望在CPU中获得很多速度(如果有的话)时间通过切换到64位。

如果您的应用程序使用大量内存并且PC有足够的RAM来跟上它,您会注意到性能有很大提升。我发现,32位.NET应用程序在使用大约1.6GB时倾向于开始抛出内存异常,但在此之前,由于paging很长,所以它们开始颠簸磁盘 - 因此您终止了I/O绑定。

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

将使用的Int64提高性能,将JIT编译器自动进行32位系统的Int64工作

的Int64已经工作在32位和64位系统,但它会在64位更快的运行。所以如果你主要用Int64进行数据处理,那么在64位系统上运行应该会有所帮助。

最重要的是measure你的表现。

0

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

最重要的是,在测量之前不要试图提高某些东西的性能。特别是你应该剖析代码来确定你的性能瓶颈在哪里。

9

This是关于这个问题的一篇很好的文章,由一位工作在64位JIT上的人员之一。基本上,除非你绝对需要64位可提供的地址空间,或者需要执行64位数学计算,否则可能会失去性能。例如,随着指针变大,缓存实际上被减半。

6

我注意到64位慢得多。

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

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

在生产代码中,我已经看到了86建立运行速度高达20%,比64建立(无其他变动)

3

综上所述,使用64位的只有

  1. 您需要额外的内存,并没有办法绕过它。
  2. 你编程例如科学应用程序,并需要提高数学精度

至于其他方面,截至今天,.NET中的64位编译器已经下降了一步。

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