4

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

4

2 回答 2

3

不,你不能。您需要先创建一个数组并将其复制到那里。另请参阅MSDN 论坛上的此线程

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

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

请注意,您需要小心初始化器。另请参阅此处

于 2011-06-26T00:36:01.487 回答
-1

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

System.Runtime.InteropServices.Marshal.Copy

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

于 2011-06-26T00:18:19.033 回答