Большое спасибо за подробное объяснение! У Троелсона написано, что они есть, написано, где их низя. А вот такого практического примера нет. Еще раз спасибо. Мира нам всем!
Ось для чого треба писати тести. На 7:15 зміна методу Build приводить до зміни функціоналу. Так як Number має публічний геттер, стара версія дозволяла його поміняти і отримати нову/іншу строку через Build. Нова прискорена версія завжди буде повертити строку з конструктора. Якщо ж залишити старий функціонал - програма буде працювати повільніше, тому що створюватиметься нова строка + буде аллокаія памяті під неї.
Привет. Спасибо, за коммент. Действительно, делая видосы понимаю, что они могут быть сложноваты для части аудитории и думаю со временем возьму и какие-то более обычные темы. До тех пор надеюсь не наврежу, а там может и помогу чем-нибудь)
Опознал в коде тестовое задание от своего работодателя. А чего пишу - хотел заметить, что если писать на .NET Core 2+, то там действительно оптимизировали производительность, а вот для .NET Framework Span - это всего лишь сахар для работы со слайсами, там никакого особо ускорения производительности у меня не случалось. И ещё один интересный момент подмечен. Пишешь библиотечную функцию для работы со строками - обязательно пиши перегрузку для того чтобы можно было передать Span. Потом кто-то скажет спасибо :-)
Я же правильно понимаю что если нам требуется просто не алоцируемая строка то можно передавать её как "Foo(in string value) => ..." ? или всё таки лучше даже для целой строки использовать ReadOnlySpan ?
Строка это ссылочный тип и все равно аллокаций однажды произойдет. С другой стороны, если нужен лишь кусок строки, то тогда отлично подойдёт спан. И вот тогда для этого спана в куче аллокаций не будет.
GitHub with code: github.com/podkolzzzin/Stream.Profiling
Большое спасибо за подробное объяснение! У Троелсона написано, что они есть, написано, где их низя. А вот такого практического примера нет. Еще раз спасибо. Мира нам всем!
Как давно я ждала здесь короткого формата! Спасибо, очень ёмко и полезно!
Спасибо, что смотрите)
Пока по плану делать этот формат по понедельникам)
Залетайте!
Ось для чого треба писати тести. На 7:15 зміна методу Build приводить до зміни функціоналу. Так як Number має публічний геттер, стара версія дозволяла його поміняти і отримати нову/іншу строку через Build. Нова прискорена версія завжди буде повертити строку з конструктора.
Якщо ж залишити старий функціонал - програма буде працювати повільніше, тому що створюватиметься нова строка + буде аллокаія памяті під неї.
Случайно наткнулся на это видео и прям до конца сидел смотрел)
Спасибо за такие интересные вещи
Для меня как для джуна некоторые моменты сложны, но твои видео помогают лучше понимать что, зачем и как
Привет. Спасибо, за коммент.
Действительно, делая видосы понимаю, что они могут быть сложноваты для части аудитории и думаю со временем возьму и какие-то более обычные темы. До тех пор надеюсь не наврежу, а там может и помогу чем-нибудь)
Мужик, видосы интересные!💪🏽😁😁
Рад, что смотрите))
очень интересное видео)
Спасибо))
Во, сам в критичных моментах прибегаю к ref struct и span. Лайк за Guns N' Roses!
Оооо))
Наконец-то нашелся, кто услышал и заценил))))
С вашего позволения (на самом деле вне зависимости от разрешения) буду пиарить ваш канал среди знакомых
Да я только рад буду))
Спасибо!
как же ору с нейминга роликов
Опознал в коде тестовое задание от своего работодателя. А чего пишу - хотел заметить, что если писать на .NET Core 2+, то там действительно оптимизировали производительность, а вот для .NET Framework Span - это всего лишь сахар для работы со слайсами, там никакого особо ускорения производительности у меня не случалось.
И ещё один интересный момент подмечен. Пишешь библиотечную функцию для работы со строками - обязательно пиши перегрузку для того чтобы можно было передать Span. Потом кто-то скажет спасибо :-)
Прирост будет и в полном дотНете: спан все равно структура и экономит аллокацию в кучи на каждый сабСтринг
а не пробовал заменить IndexOf и Substring на Split? какой будет результат?
Пробовал)
Там вообще кошмар: 3 аллокации - массив, первая строка, вторая строка.
Я же правильно понимаю что если нам требуется просто не алоцируемая строка то можно передавать её как "Foo(in string value) => ..." ? или всё таки лучше даже для целой строки использовать ReadOnlySpan ?
Строка это ссылочный тип и все равно аллокаций однажды произойдет.
С другой стороны, если нужен лишь кусок строки, то тогда отлично подойдёт спан. И вот тогда для этого спана в куче аллокаций не будет.