Вопрос

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

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

Это было полезно?

Решение

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

Вы заметите значительное повышение производительности, если ваше приложение использует много памяти, а на КОМПЬЮТЕРЕ достаточно оперативной памяти, чтобы не отставать от него.Я обнаружил, что 32-битные.СЕТЕВЫЕ приложения, как правило, начинают выдавать исключения нехватки памяти, когда вы используете около 1,6 ГБ, но они начинают перегружать диск из-за подкачка задолго до этого - так что вы перестанете быть привязанным к вводу-выводу.

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top