Передача байта * в Stream.Read (byte [], int, int) - PullRequest
2 голосов
/ 26 июня 2011

.NET-функция Stream.Read () принимает байт [] в качестве параметра.Есть ли способ передать вместо байта stackalloc'd *?Это избавит меня от необходимости делать дополнительное выделение кучи и, в свою очередь, сэкономит время на сборку мусора.Эта функция короткая и часто вызывается.

Ответы [ 2 ]

2 голосов
/ 26 июня 2011

Нет, ты не можешь. Вам нужно создать массив и сначала скопировать его туда. См. Также эту тему на форумах MSDN .

Кроме того: я не знаю контекст вашего приложения, но, возможно, вы можете использовать статически распределенный буфер? В многопоточном контексте вы можете выделить буфер в TLS следующим образом:

class SomeDataProcessor
{
    [ThreadStatic]
    static byte[] _Buffer;
}

Обратите внимание, что вы должны быть осторожны с инициализаторами. Смотри также здесь

0 голосов
/ 26 июня 2011

Я не верю, что вы можете, но если вы хотите упростить преобразование.Вы можете использовать:

System.Runtime.InteropServices.Marshal.Copy

Принимает неуправляемый адрес, размер, байтовый буфер и т. Д.

...