Если вы работаете без отладки в Visual Studio, вы также получите хорошую производительность. Причина, по которой отладка замедляет вашу программу, двояка.
Во-первых, JITer может выполнить несколько оптимизаций, но не будет, когда отладчик подключен, эти оптимизации делают невозможным пошаговое выполнение кода, но выводят эквивалентную информацию.
Например, следующий код потенциально может быть полностью удален JIT (кроме определения).
int[] data = new int[10000];
for (int i = 0; i < data.Length; i++)
data[i] = 0;
Причина в том, что конструктор для массива очищает содержимое, и поэтому эта операция является избыточной. Однако при отладке может потребоваться пошаговое выполнение кода, чтобы он сохранился.
Кроме того, во время секций с высокой производительностью вы часто будете иметь 50% -ное снижение скорости из-за того, что любая другая операция является NOP, которая ничего не делает, но все же занимает тактовый цикл. Эти NOP позволяют функционировать точкам останова, но JIT не будет выдавать их, если отладчик не подключен.
Обратите внимание, что то, что я говорю, является обобщением, фактические взаимодействия компилятора и JIT немного сложнее.