C#: Как отправить неуправляемую память через SocketAsyncEventArgs? - PullRequest
0 голосов
/ 07 января 2020

У меня есть видеоданные, и я регулярно создаю новые кадры для многих клиентов. Я получаю кадры из библиотеки как IntPtr и int, представляющие размер байтового массива. В настоящее время я превращаю это в «Память» и отправляю его через NetworkStream, получая нулевое копирование довольно большого буфера, как только он у меня есть.

Я хотел бы попытаться сделать то же самое, используя SocketAsyncEventArgs для посмотрите, работает ли он лучше, и попробуйте эти пользовательские токены для нескольких клиентов. Однако я не могу понять, как сказать SocketAsyncEventArgs отправлять кусок памяти, на который указывает IntPtr, где int представляет известный размер при сохранении нулевой копии. Похоже, что какой-то умный Marshalling или «MemoryMarshal» должен добиться цели, но я этого не вижу.

Видите ли вы способ выполнить sh это?

1 Ответ

1 голос
/ 11 января 2020

Использование. Net Core 2.1 +

Вы можете установить буфер памяти, используя SetBuffer(Memory<byte>) см. Здесь

public void SetBuffer (Memory<byte> buffer);

In. Net Framework, который вам понадобится скопировать в byte[]. Но, как говорится в комментариях выше, это не будет вашей bottle шеей.

...