Вопрос по оптимизации кода. Какой код будет более оптимальным для C#?

string[] numbers = new string[] { "3", "2", "5", "1", "4" };
int max = 0;

// вариант 1
for (int i = 0; i < numbers.Length; i++)
{
	if (int.Parse(numbers[i]) > max)
		max = int.Parse(numbers[i]);
}

// вариант 2
for (int i = 0; i < numbers.Length; i++)
{
	int n = int.Parse(numbers[i]);
	if (n > max)
		max = n;
}
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 3
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Нужно собрать релизную сборку и сравнить IL код. Вполне возможно что это одно и то же. А если различия и будут, то можно говорить только о конкретной версии dotnet framework. IL может изменяться в зависимости от конкретной CLR или конкретной версии framework. Но даже увидев инструкции я бы не стал предполагать, что из этого быстрее, а написал бенчмарк. Потому что все еще и зависит от железа на котором исполняется.
https://github.com/dotnet/BenchmarkDotNet

PS

Прежде чем заниматься такими микрооптимизациями, нужно понимать, действительно ли это нужно. Если это ради обучения - ок, но если это реальная задача то в 99% случаев узким местом будет не тот код, который вы считаете узким местом. А реальность покажет профилировщик.
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
sharplab.io в помощь вам. вариант 2 однозначно оптимальнее, что даже показывает код после JIT. JIT даже не оптимизирует 2 вызов, компилятор бы C или C++ думаю бы оптимизировал до одного вызова Parse, JIT такое не делает, другое, что второй вариант более понятен и читаем.
Ответ написан
Zarinov
@Zarinov Автор вопроса
Ок. А если вместо функции стоит выражение? Например a = b * c. Есть про такие варианты какие нибудь правила?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы