Разница .NET JIT при использовании Factory Pattern и If-else или switch - PullRequest
0 голосов
/ 11 июня 2018

Я просто бродил, если бы у меня был один метод, который обрабатывал бы 100 различных случаев на основе перечисления, скажем (при условии, что каждый случай имеет в среднем 5 строк кода), это действительно повлияло бы на производительность?Как насчет того, чтобы вместо того, чтобы иметь весь код в одном методе, использовался бы шаблон Factory или Strategy?

JIT компилирует только тот код, который действительно необходим в этот момент.Так что я предполагаю, что он скомпилирует метод дырок из 100 случаев, верно?На самом деле не знаю, какая часть этого метода нужна правильно?но если бы я разделил этот метод, он на самом деле скомпилирует то, что ему нужно, верно?Например, выпадающий список действий (список из 100 марок автомобилей)

Как бы это сравнилось с точки зрения производительности?

Спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Боюсь, вы упускаете главное, что делает Джит.Он компилирует cil , который не зависит от процессора и платформы, в машинный и машинный код специфичный .

JIT компилирует только тот код, который действительно необходим в этой точке.

Да, при первом вызове вашего метода Jit компилирует его, поэтомуname Компилятор Just-In-Time .

Так что, я думаю, он скомпилирует метод дырок из 100 случаев, верно?

Да.

Неужели на самом деле не известно, какая часть этого метода нужна правильно?но если бы я разделил этот метод, он на самом деле скомпилирует то, что ему нужно, верно?

Теперь здесь возникает путаница, да, он скомпилирует весь метод, но обратите внимание, что это будет только один раз для каждого приложениязапускать.Поскольку Jit компилируется во время выполнения, мы можем сказать, что при первом вызове метода незначительное *1027* влияние на производительность будет вызвано, можно утверждать, что для разделения этого метода на несколько методов потребуется несколько Jit-компиляций..

С учетом вышесказанного, если вы работаете над каким-то очень высоким требованием к производительности приложения и беспокоитесь о недостатке Jit, вы всегда можете использовать ngen и компилировать нативные изображения перед запуском приложения.и затем CLR может использовать эти изображения для ускорения процесса для вас, и это удалит Jit-компиляцию, как это было в основном до запуска приложения.Я могу понять, как это может быть полезно для приложений, заботящихся о холодных стартапах, таких как приложения, размещенные на функциональных платформах в качестве сервисов, но это насколько я могу пойти на примерах из реального мира.

И, наконец,

Как бы это сравнить друг с другом с точки зрения производительности?

Если честно, я никогда не буду беспокоиться о влиянии компиляции Jit, я бы лучше сосредоточился наструктуры данных, которые я использую, или специфическую для домена логику, которую я имею, чтобы улучшить свою производительность.

...