64-битная настройка производительности .NET - PullRequest
10 голосов
/ 18 августа 2008

Я знаю, что .NET JIT скомпилирован с архитектурой, на которой вы работаете непосредственно перед запуском приложения, но оптимизирует ли JIT-компилятор для 64-битной архитектуры?

Есть ли что-то, что необходимо сделать или учесть при программировании приложения, которое будет работать на 64bit system? (То есть улучшит ли использование Int64 производительность, и компилятор JIT автоматически заставит Int64 работать на 32-битных системах?)

Ответы [ 5 ]

14 голосов
/ 18 августа 2008

64-битный JIT отличается от от такового для 32-битного, поэтому я ожидаю некоторые различия в выводе - но я бы не стал переходить на 64-битный только для этого, и я не ожидал бы получить большая скорость (если есть) в процессоре при переключении на 64 бит.

Вы заметите значительное улучшение производительности, если ваше приложение использует много памяти, а на ПК достаточно оперативной памяти, чтобы не отставать от него. Я обнаружил, что 32-разрядные приложения .NET, как правило, начинают выбрасывать исключения из памяти, когда вы используете около 1,6 ГБ, но они начинают перегружать диск из-за подкачки задолго до этого - так что вы заканчиваете будучи связанным с вводом / выводом.

В принципе, если у вас узкое место - процессор, то 64-битная версия вряд ли поможет. Если ваше узкое место - это память, то вы должны увидеть значительное улучшение.

Улучшит ли производительность Int64, и компилятор JIT автоматически заставит Int64 работать на 32-битных системах

Int64 уже работает как на 32-битных, так и на 64-битных системах, но он будет работать быстрее на 64-битных системах. Так что, если вы в основном работаете с числами в Int64, то работа в 64-битной системе должна помочь.

Самое важное - измерить вашу производительность.

9 голосов
/ 16 сентября 2008

Эта - хорошая статья на эту тему, написанная одним из людей, работавших над 64-битным JIT. По сути, если вам абсолютно не нужно адресное пространство, которое может предложить 64-битная система, или если вам не нужно выполнять 64-битную математику, вы, скорее всего, потеряете производительность. Так как указатели больше, кэш, например, уменьшается вдвое.

6 голосов
/ 08 января 2009

Я заметил, что 64-битная версия намного медленнее.

Как уже говорилось, 64-битный JIT-компилятор ведет себя иначе, чем x86-JIT-компилятор. Компилятор x86 использует некоторые оптимизации, которых нет у x64.

Например, в .NET 3.5 32-битный JIT будет вызывать встроенные вызовы функций со структурами в качестве аргументов, а 64-битный JIT - нет.

В производственном коде я видел, что сборки x86 работают на 20% быстрее, чем сборки x64 (без других изменений)

3 голосов
/ 15 февраля 2010

Чтобы подвести итог, используйте 64-битные только если

  1. Вам нужна дополнительная память, и нет пути к ней.
  2. Вы программируете, например, научные приложения и нуждаются в повышенной точности математики

По всем остальным аспектам на сегодняшний день 64-битный компилятор в .NET находится на шаг ниже.

Оптимизация производительности, проводимая в компиляторах .NET, является большой проблемой.

0 голосов
/ 18 августа 2008

Узкие места производительности будут одинаковыми независимо от того, является ли архитектура 32- или 64-разрядной. Проблемы с производительностью, как правило, являются результатом неоптимальных алгоритмов & mdash; выбор между 32- и 64-разрядными типами не окажет существенного влияния на производительность.

Самое главное, не пытайтесь улучшить производительность чего-либо до того, как вы его измерили. В частности, вам следует профилировать код, чтобы определить узкие места в производительности.

...