Ayrat
Зеро аллок в многопотоке - это такое.
Или свой пул писать для шареных данных
Vladimir
Ayrat
Vladimir
ну так объекты с хипа прокидываю а не массивы байт не обработанных)
Vladimir
тут же изначально проблема в чем - чтобы начать обрабатывать данные сейчас надо было скопировать все через ToArray
Vladimir
Но если в 3м коре это улучшилось, то супер, надо посмотреть
Ayrat
Ayrat
Мы по-моему о разном
Vladimir
хз на чем, это ReadOnlySequence, я не знаю что внутри =(
Vasily
Vasily
Спокойно
Vasily
Все ок
Ayrat
Я нихуя не понял, но не вижу проблем скопировать в массив на стеке
Vasily
Он сам рентит
Vasily
Сам релизит потом
Ayrat
Отдавать все равно через хип
Vladimir
ну вот, ToArray() же скопирует массив из ArrayPool на хип
Vasily
Не вижу вообще проблем в копировании
Ayrat
Vladimir
как!?))
Ayrat
Vladimir
у тебя есть ReadOnlySequence скопируй мне его в массив на стеке)
Vasily
Используйте CopyTo
Vasily
Что вы как маленькие
Vasily
https://docs.microsoft.com/ru-ru/dotnet/api/system.buffers.buffersextensions.copyto?view=netcore-3.0
Ayrat
Стакаллок byte[100]
For each byte in readOnlySeq
.. пишем побайтово в массив на стеке
Ayrat
Ayrat
Даже ЦЕЛЫЙ фор не надо писать
Ayrat
Я хуею
Vasily
Документацию почитайте, елы-палы
Vladimir
Балин)
Vasily
yahoo.eu, в общем
Vasily
Вроде неглупые люди
Vladimir
=) ну ладно, все равно надо копировать!!
Vladimir
а можно было бы и не копировать!!
Vasily
Ну , учитывая ArrayPool
Vasily
Копируешь ты все равно с zero alloc
Vasily
кагбэ
Vasily
Поэтому не вижу повода для истерик
Vladimir
ArrayPool не бесплатный, особенно когда маленькие чанки, там приличный оверхед
Anatoly
Vladimir
И CopyTo кстати не сработает, так как тебе нужно знать обычно размер данных
Vladimir
вот форич с ручным подсчетом байтов наверное ок)
Anatoly
Vasily
Слин
Vasily
Млин
Vasily
Ну вы чо
Anatoly
Vasily
Slice->CopyTo
Vasily
Ну шо за день-то сегодня
Anatoly
Anatoly
С шорткатом
Anatoly
На односегментный сиквенс
Anatoly
А всё потому, что генерики хуже шаблонов. В плюсах был бы единый алгоритм
habib
коммон лисп все-таки язык со строгой типизацией
Bonart
Vladislav
как!?))
```
let inline stackalloc<'a when 'a: unmanaged> size =
let p = NativePtr.stackalloc<'a> size |> NativePtr.toVoidPtr
Span<'a>(p, size)
```
Bonart
Добавить нужный констрайнт - и будет единый алгоритм
Nikolay
В общем, у меня от клиентов идут данные в формате, где первые 2 байта - размер payload, а дальше идёт сама payload. Мне нужно прочитать это, и отправить всем клиентам данные в формате, где первые 2 байта размер payload, затем идёт payload, где первые 4 байта - хэш код сокета отправителя, а остальное - payload отправителя.
Вот я сейчас этим байтоёбством занимаюсь, и пытаюсь сделать максимум оптимизаций
Anatoly
Bonart
Хз
Я смотрел эту тему. Не хватает именно ограничения на стековость
Bonart
Шаблоны тут из пушки по воробьям
Anatoly
Bonart
Т.е. для массива, списка, мемори я общий код сделаю
Anatoly
Bonart
Но не для спана
Anatoly
https://aensidhe.ru/blog/readonlyspan-readonlysequence-c++/
Bonart
Добавить поддержку ограничения на стековость - и генерики снова на коне
Anatoly
У тебя в обертке будет что? Условие какое-нибудь
Nikolay
В общем, у меня от клиентов идут данные в формате, где первые 2 байта - размер payload, а дальше идёт сама payload. Мне нужно прочитать это, и отправить всем клиентам данные в формате, где первые 2 байта размер payload, затем идёт payload, где первые 4 байта - хэш код сокета отправителя, а остальное - payload отправителя.
Вот я сейчас этим байтоёбством занимаюсь, и пытаюсь сделать максимум оптимизаций
Вот такая реализация рабочая, но довольно топорная, хочется получше
Anatoly
Vasily
Ох бля
Vasily
Глаза вытекли