0

我的问题很简单..

当传递一个 MemoryStream 对象时,内部缓冲区(字节 [])是否在内存中再次分配?

问题来自内存碎片的地方,这在大规模系统中可能会出现问题。

4

3 回答 3

4

那要看。如果您通过构造函数从 byte[] 初始化 MemoryStream,则:不。MemoryStream 将拒绝调整大小,因为它只是现有缓冲区的一个窗口。

如果您创建一个新的 MemoryStream而不传入缓冲区,那么您将一个缓冲区写入内存流 - 那么:是的。在这种情况下,缓冲区是不相关的,即使它们碰巧具有相同的字节内容。

编辑:澄清 - 我只是指建设。之后,当你传递它时:不,当然它不是重复的。它是一个类:您只传递对单个对象的引用。

于 2013-04-24T17:42:26.603 回答
3

不,当传递任何对象时,您只是传递对该对象的引用。您仍在引用相同的MemoryStream,它仍在引用相同的内部缓冲区。没有任何东西被重新分配。

于 2013-04-24T17:44:58.260 回答
1

在 C# 中,每个非值类型实际上都是底层的引用,因此当您将 MemoryStream 传递给方法时,您应该只将引用传递给 MemoryStream,而不是 MemoryStream 的副本。

http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx#vclrfpassingmethodparameters_referencetypes

于 2013-04-24T17:44:59.530 回答