Бенчмарк для видео
Для запуска бенчмарков:
cargo bench
Для вектора из 2 млн компонентов реализация через match
на моём компьютере занимает 7.62
, что в 2
раза быстрее динамического варианта, но с добавлением динамического компонента компилятор не может оптимизировать это и реализация через enum
становится в 6
раз быстрее динамического варианта.
Running benches/dyn_vs_enum.rs (target/release/deps/dyn_vs_enum-f1a43a767e5f50db)
Динамическая реализация с добавлением пользователем своих собственных типов:
╭─────────────────────────────┬─────────┬───────────┬───────────┬───────────┬───────────╮
│ benchmark │ args │ fastest │ median │ mean │ stddev │
├─────────────────────────────┼─────────┼───────────┼───────────┼───────────┼───────────┤
│ bench_dynamic_impl_with_new │ 20000 │ 424.17 µs │ 426.88 µs │ 428.22 µs │ 4.58 µs │
├─────────────────────────────┼─────────┼───────────┼───────────┼───────────┼───────────┤
│ bench_dynamic_impl_with_new │ 200000 │ 4.21 ms │ 4.27 ms │ 4.27 ms │ 30.27 µs │
├─────────────────────────────┼─────────┼───────────┼───────────┼───────────┼───────────┤
│ bench_dynamic_impl_with_new │ 2000000 │ 41.80 ms │ 42.60 ms │ 42.61 ms │ 600.14 µs │
╰─────────────────────────────┴─────────┴───────────┴───────────┴───────────┴───────────╯
Динамическая реализация без добавления пользователем своих собственных типов:
╭──────────────────────────────────┬─────────┬───────────┬───────────┬───────────┬───────────╮
│ benchmark │ args │ fastest │ median │ mean │ stddev │
├──────────────────────────────────┼─────────┼───────────┼───────────┼───────────┼───────────┤
│ bench_dynamic_impl_with_existing │ 20000 │ 104.20 µs │ 108.20 µs │ 111.61 µs │ 10.18 µs │
├──────────────────────────────────┼─────────┼───────────┼───────────┼───────────┼───────────┤
│ bench_dynamic_impl_with_existing │ 200000 │ 1.20 ms │ 1.23 ms │ 1.26 ms │ 69.29 µs │
├──────────────────────────────────┼─────────┼───────────┼───────────┼───────────┼───────────┤
│ bench_dynamic_impl_with_existing │ 2000000 │ 12.64 ms │ 13.17 ms │ 13.25 ms │ 374.70 µs │
╰──────────────────────────────────┴─────────┴───────────┴───────────┴───────────┴───────────╯
Реализация через match
:
╭─────────────────┬─────────┬───────────┬───────────┬───────────┬───────────╮
│ benchmark │ args │ fastest │ median │ mean │ stddev │
├─────────────────┼─────────┼───────────┼───────────┼───────────┼───────────┤
│ bench_enum_impl │ 20000 │ 29.81 µs │ 34.30 µs │ 36.30 µs │ 6.47 µs │
├─────────────────┼─────────┼───────────┼───────────┼───────────┼───────────┤
│ bench_enum_impl │ 200000 │ 657.47 µs │ 700.42 µs │ 716.38 µs │ 58.37 µs │
├─────────────────┼─────────┼───────────┼───────────┼───────────┼───────────┤
│ bench_enum_impl │ 2000000 │ 7.29 ms │ 7.59 ms │ 7.62 ms │ 188.16 µs │
╰─────────────────┴─────────┴───────────┴───────────┴───────────┴───────────╯