Ayrat
Зеро аллок в многопотоке - это такое. Или свой пул писать для шареных данных
Vladimir
Не, я про выходной результат. Ну то есть он сам стакаллочит на своём треде и тебе копировать надо в хип чтобы поюзать в другом треде.
так зачем копировать? я сразу в потоке ридера трансформирую инпут в доменные объекты и дальше прокидываю другим тредам
Vladimir
ну так объекты с хипа прокидываю а не массивы байт не обработанных)
Vladimir
тут же изначально проблема в чем - чтобы начать обрабатывать данные сейчас надо было скопировать все через ToArray
Vladimir
Но если в 3м коре это улучшилось, то супер, надо посмотреть
Ayrat
Мы по-моему о разном
Vladimir
хз на чем, это ReadOnlySequence, я не знаю что внутри =(
Vasily
Спокойно
Vasily
Все ок
Ayrat
Я нихуя не понял, но не вижу проблем скопировать в массив на стеке
Vasily
Он сам рентит
Vasily
Сам релизит потом
Ayrat
Отдавать все равно через хип
Vladimir
ну вот, ToArray() же скопирует массив из ArrayPool на хип
Vasily
Не вижу вообще проблем в копировании
Ayrat
ну вот, ToArray() же скопирует массив из ArrayPool на хип
А почему нельзя в массив на стеке-то???
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
Я хуею
Vasily
Документацию почитайте, елы-палы
Vladimir
Балин)
Vasily
yahoo.eu, в общем
Vasily
Вроде неглупые люди
Vladimir
=) ну ладно, все равно надо копировать!!
Vladimir
а можно было бы и не копировать!!
Vasily
Ну , учитывая ArrayPool
Vasily
Копируешь ты все равно с zero alloc
Vasily
кагбэ
Vasily
Поэтому не вижу повода для истерик
Vladimir
ArrayPool не бесплатный, особенно когда маленькие чанки, там приличный оверхед
Vladimir
И CopyTo кстати не сработает, так как тебе нужно знать обычно размер данных
Vladimir
вот форич с ручным подсчетом байтов наверное ок)
Anatoly
хз на чем, это ReadOnlySequence, я не знаю что внутри =(
Там адок, я плакался в бложике на эту тему
Vasily
Слин
Vasily
Млин
Vasily
Ну вы чо
Vasily
Slice->CopyTo
Vasily
Ну шо за день-то сегодня
Vladimir
У секвенса длина есть
точно) аргумент не валиден)
Anatoly
С шорткатом
Anatoly
На односегментный сиквенс
Anatoly
А всё потому, что генерики хуже шаблонов. В плюсах был бы единый алгоритм
habib
Это если сишник не заморачивается
на самом деле там просто нужно указать тип)
habib
коммон лисп все-таки язык со строгой типизацией
Bonart
А всё потому, что генерики хуже шаблонов. В плюсах был бы единый алгоритм
Генерики лучше шаблонов. Шаблоны мощнее, но хуже во всем остальном
Vladislav
как!?))
``` let inline stackalloc<'a when 'a: unmanaged> size = let p = NativePtr.stackalloc<'a> size |> NativePtr.toVoidPtr Span<'a>(p, size) ```
Bonart
А всё потому, что генерики хуже шаблонов. В плюсах был бы единый алгоритм
А все потому что компилятор просто недопилен в плане поддержки генериков на спанах
Bonart
Добавить нужный констрайнт - и будет единый алгоритм
Nikolay
В общем, у меня от клиентов идут данные в формате, где первые 2 байта - размер payload, а дальше идёт сама payload. Мне нужно прочитать это, и отправить всем клиентам данные в формате, где первые 2 байта размер payload, затем идёт payload, где первые 4 байта - хэш код сокета отправителя, а остальное - payload отправителя. Вот я сейчас этим байтоёбством занимаюсь, и пытаюсь сделать максимум оптимизаций
Bonart
Хз
Я смотрел эту тему. Не хватает именно ограничения на стековость
Bonart
Шаблоны тут из пушки по воробьям
Bonart
У них нет общего интерфейса
Это как раз лечится легко. Адаптером в виде структуры-обертки.
Bonart
Т.е. для массива, списка, мемори я общий код сделаю
Bonart
Но не для спана
Anatoly
https://aensidhe.ru/blog/readonlyspan-readonlysequence-c++/
Bonart
Это сразу минус перформанс
Ни хрена. Я мерял. Генерики на структурах рвут и мечут
Bonart
Добавить поддержку ограничения на стековость - и генерики снова на коне
Anatoly
У тебя в обертке будет что? Условие какое-нибудь
Vasily
Ох бля
Vasily
Глаза вытекли
Igor
У секвенса длина есть
только вы еще расскажите как она считается по умолчанию
Bonart
У тебя в обертке будет что? Условие какое-нибудь
https://github.com/Kirill-Maurin/Sample.Struct/blob/master/Sample.Struct/Indexables/ArrayIndexable.cs - вот пример обертки