Комментарии 2
Всегда было интересно, зачем делать что-то типа:
int counter = 0;
foreach (Direction direction in directions)
{
...
++counter;
}
Вместо простого цикла "for" который тебе этот counter автоматом предоставит, плюс ещё без потенциальных ошибок, когда несколько раз его заинкрементишь или наборот.
Вместо простого цикла "for" который тебе этот counter автоматом предоставит,
Конкретно мне инкремент и не сильно нужен, я это добавлял для отладки и не убрал.
Всегда было интересно, зачем делать что-то типа:
Ходят легенды, что foreach более производительный, чем for. Особенно если перебор идет по каким-то коллекциям классов, а не примитивным типам вроде int.
Бенчмарк
Результат

Код:
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
public record Direction(BudgetType BudgetType, string Name, string Code, EducationFormat Format);
public enum BudgetType
{
Type1,
Type2,
Type3
}
public enum EducationFormat
{
Format1,
Format2,
Format3
}
[MemoryDiagnoser]
public class Benchmark
{
private List<Direction> directions;
[Params(1000, 10000, 100000,1000000)]
public int N;
[GlobalSetup]
public void GlobalSetup()
{
directions = new List<Direction>();
for (int i = 0; i < N; i++)
{
directions.Add(new Direction(BudgetType.Type1, $"Name{i}", $"Code{i}", EducationFormat.Format1));
}
}
[Benchmark]
public void ForeachLoop()
{
foreach (var direction in directions)
{
var some = direction;
}
}
[Benchmark]
public void ForLoop()
{
for (int i = 0; i < directions.Count; i++)
{
var direction = directions[i];
}
}
}
class Program
{
static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<Benchmark>();
}
}
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Проверяем зачисление в ВУЗ через телеграм бота