64 бит.Настройка производительности сети
-
08-06-2019 - |
Вопрос
Я знаю это .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-разрядную версию только в том случае, если
- Вам нужна дополнительная память, и обойти это невозможно.
- Вы программируете, напримернаучные приложения и нуждаются в повышенной математической точности
Во всех остальных аспектах, на сегодняшний день 64-разрядный компилятор в .NET находится на один шаг ниже.
Оптимизация производительности, выполняемая в компиляторах .NET, является большой проблемой.
Узкие места производительности будут одинаковыми независимо от того, является ли архитектура 32- или 64-разрядной.Проблемы с производительностью, как правило, являются результатом неоптимальных алгоритмов — выбор между 32- и 64-разрядными типами существенно не повлияет на производительность.
Самое главное, не пытайтесь улучшить производительность чего-либо до того, как вы это измерите.В частности, вам следует профилировать код, чтобы определить, где находятся ваши узкие места в производительности.