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

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

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

18.08.2008 10:35:14
5 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

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

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

14
1.12.2011 23:48:30

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

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

0
18.08.2008 10:57:09

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

9
16.09.2008 03:54:32

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

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

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

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

6
19.01.2009 00:16:48

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

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

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

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

3
15.02.2010 17:11:42