10

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

在编写将在64bit system. (即使用 Int64 会提高性能,JIT 编译器会自动使 Int64 在 32 位系统上工作吗?)

4

5 回答 5

14

64 位 JIT 与32 位的JIT 不同,所以我预计输出会有一些差异 - 但我不会仅仅为此切换到 64 位,而且我不希望在 CPU 时间上获得太多速度(如果有的话)通过切换到 64 位。

如果您的应用程序使用大量内存并且 PC 有足够的 RAM 来跟上它,您会注意到性能有很大的提升。我发现 32 位 .NET 应用程序往往会在您使用大约 1.6gb 时开始抛出内存不足异常,但由于在此之前很久就有分页,它们开始破坏磁盘-所以您最终会受到 I/O 限制。

基本上,如果你的瓶颈是 CPU,那么 64 位不太可能有帮助。如果您的瓶颈是内存,那么您应该会看到很大的改进。

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

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

最重要的是衡量你的表现。

于 2008-08-18T11:11:31.767 回答
9

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

于 2008-09-16T03:54:32.017 回答
6

我注意到 64 位的速度要慢得多。

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

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

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

于 2009-01-08T17:05:22.647 回答
3

总而言之,仅在以下情况下使用 64 位

  1. 你需要额外的内存,而且没有办法解决它。
  2. 您编写科学应用程序等程序并需要提高数学精度

在其他所有方面,截至今天,.NET 中的 64 位编译器都落后了一步。

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

于 2010-02-15T17:11:42.850 回答
0

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

最重要的是,在测量之前不要试图提高性能。特别是,您应该分析代码以确定您的性能瓶颈在哪里。

于 2008-08-18T10:57:09.130 回答