将一个字节*传递给Stream.Read(byte [],int,int)

时间:2011-06-26 00:09:41

标签: c# stack heap unsafe

.NET函数Stream.Read()将byte []作为参数。有没有办法可以传递stackalloc'd字节*?这将使我不必进行额外的堆分配,从而节省垃圾收集的时间。此功能很短,可以反复调用。

2 个答案:

答案 0 :(得分:2)

不,你不能。您需要先创建一个数组并将其复制到那里。另请参阅this thread on MSDN forums

除此之外:我不知道你的应用程序的上下文,但也许你可以使用静态分配的缓冲区?在多线程上下文中,您可以在TLS中分配缓冲区,如下所示:

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

请注意,您需要注意初始化程序。另请参阅here

答案 1 :(得分:-1)

我不相信你可以,但如果你想简化转换。您可以使用:

System.Runtime.InteropServices.Marshal.Copy

接受非托管地址,大小,字节缓冲区等