我的问题很简单..
传递MemoryStream对象时,内存缓冲区(byte [])是否会再次分配到内存中?
问题来自内存碎片的位置,这在大规模系统中可能会有问题。
答案 0 :(得分:4)
这取决于。如果通过构造函数从byte []初始化MemoryStream,则:no。 MemoryStream将拒绝调整大小,因为它只是现有缓冲区的一个窗口。
如果您创建一个新的MemoryStream 而没有传入缓冲区,那么您将缓冲区写入内存流 - 然后:是。在这种情况下,即使缓冲区碰巧具有相同的字节内容,缓冲区也是不相关的。
编辑:澄清 - 我只是指构建。在那之后,当你传递它时:不,当然它不是重复的。它是一个类:您只是将引用传递给单个对象。
答案 1 :(得分:3)
没有。传递任何对象时,您只是传递对该对象的引用。您仍然引用相同的MemoryStream
,它仍然引用相同的内部缓冲区。什么都没有重新分配。
答案 2 :(得分:1)
在C#中,每个非值类型实际上都是引用的引用,因此当您将MemoryStream传递给方法时,您应该只将引用传递给MemoryStream,而不是MemoryStream的副本。