我知道它.NET
是JIT
在应用程序运行之前编译到您正在运行的架构上的,但是 JIT 编译器是否针对 64 位架构进行了优化?
在编写将在64bit system
. (即使用 Int64 会提高性能,JIT 编译器会自动使 Int64 在 32 位系统上工作吗?)
我知道它.NET
是JIT
在应用程序运行之前编译到您正在运行的架构上的,但是 JIT 编译器是否针对 64 位架构进行了优化?
在编写将在64bit system
. (即使用 Int64 会提高性能,JIT 编译器会自动使 Int64 在 32 位系统上工作吗?)
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 位系统上运行应该会有所帮助。
最重要的是衡量你的表现。
这是一篇关于该主题的好文章,由从事 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 编译器中进行的性能优化是一个大问题。
无论架构是 32 位还是 64 位,性能瓶颈都是相同的。性能问题往往是次优算法的结果——选择 32 位和 64 位类型不会显着影响性能。
最重要的是,在测量之前不要试图提高性能。特别是,您应该分析代码以确定您的性能瓶颈在哪里。