64-битная настройка производительности .NET

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

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


person Adam Haile    schedule 18.08.2008    source источник


Ответы (5)


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

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

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

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

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

Самое главное — оцените свою эффективность.

person Wilka    schedule 18.08.2008

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

person Bill Wert - MSFT    schedule 16.09.2008

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

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

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

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

person Oliver Hallam    schedule 08.01.2009

Подводя итог, используйте 64-битную версию, только если

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

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

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

person Theodore Zographos    schedule 15.02.2010

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

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

person Ted Percival    schedule 18.08.2008