Большое спасибо за подробное объяснение! У Троелсона написано, что они есть, написано, где их низя. А вот такого практического примера нет. Еще раз спасибо. Мира нам всем!
Привет. Спасибо, за коммент. Действительно, делая видосы понимаю, что они могут быть сложноваты для части аудитории и думаю со временем возьму и какие-то более обычные темы. До тех пор надеюсь не наврежу, а там может и помогу чем-нибудь)
Ось для чого треба писати тести. На 7:15 зміна методу Build приводить до зміни функціоналу. Так як Number має публічний геттер, стара версія дозволяла його поміняти і отримати нову/іншу строку через Build. Нова прискорена версія завжди буде повертити строку з конструктора. Якщо ж залишити старий функціонал - програма буде працювати повільніше, тому що створюватиметься нова строка + буде аллокаія памяті під неї.
Опознал в коде тестовое задание от своего работодателя. А чего пишу - хотел заметить, что если писать на .NET Core 2+, то там действительно оптимизировали производительность, а вот для .NET Framework Span - это всего лишь сахар для работы со слайсами, там никакого особо ускорения производительности у меня не случалось. И ещё один интересный момент подмечен. Пишешь библиотечную функцию для работы со строками - обязательно пиши перегрузку для того чтобы можно было передать Span. Потом кто-то скажет спасибо :-)
Я же правильно понимаю что если нам требуется просто не алоцируемая строка то можно передавать её как "Foo(in string value) => ..." ? или всё таки лучше даже для целой строки использовать ReadOnlySpan ?
Строка это ссылочный тип и все равно аллокаций однажды произойдет. С другой стороны, если нужен лишь кусок строки, то тогда отлично подойдёт спан. И вот тогда для этого спана в куче аллокаций не будет.