Closed olsh closed 3 years ago
@rus-art я обновил PR. Использовал подход где внутренний массив в MemoryStream не резайзится (почти). Думаю что это будет лучше подхода с SetLength
в моем первоначальном варианте и вашем.
Дайте знать что думаете по этому поводу.
Финальные замеры
Method | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
---|---|---|---|---|---|---|---|---|
Original | 8.744 μs | 0.0476 μs | 0.0422 μs | 1.00 | 0.9918 | - | - | 3.08 KB |
Optimized | 7.796 μs | 0.0445 μs | 0.0371 μs | 0.89 | 0.6104 | - | - | 1.88 KB |
Вторая серьезная аллокация происходит тут, предлагаю исправить ее отдельным PR.
@rus-art дадим этому PR движение? :)
@rus-art я обновил PR, теперь копирование не будет происходить если сообщение полностью поместилось в буффер (на самом деле я не видел сообщений больше буффера, так что, вероятно, всегда будет так). MemoryStream используется как фоллбек если все таки пришло большое сообщение.
@olsh Спасибо, мержу
@rus-art размер буфера поправил.
Небольшая оптимизация получения стриминг эвентов. Результаты синтетического теста. На ~30% меньше выделение памяти и на ~7% меньше расхода CPU.