такие результаты.
Есть класс Parser, который в массиме байт находит определенные сообщения и генерирует событие:
class Parser {
public void Parse(byte[] bytes){ }
public event EventHandler<Frame> FrameParsed;
}
Есть тестовый массив, в котором находится 70000 сообщений, которые парсер должен обработать:
public void Main(){
Frame[] frames = new Frame[70000];
int framesCount = 0;
Parser parser = new Parser();
parser.FrameParsed += (s,frame)=>
{
/*1*/ //framesCount++; // 1600мс
/*2*/ //frames[framesCount++] = frame; // 2500мс
/*3*/ //accum += frame.SomeField; // 2500мс
}
var sw = Stopwatch.StartNew();
parser.Parse(...);
sw.Stop();
}
Если в обработчике события я только подсчитываю обнаруженные пакеты (/*1*/), то метод выполняется за 1600с.
Если сохранять принятые кадры в массиве (/*2*/), то время выполнения неадекватно возрастает (всего 70к объектов)
win10, .net6, и в отладочной и в релизной сборке разница во времени есть. Почему?
И самое странное: если я в Reader создание объекта Frame и передачи его в событие FrameParsed заменяю на null,
то время выполнения одинаковое - и в /*1*/ и во /*2*/ случае
показал бы еще клас Parser и Frame
Обсуждают сегодня