8

在使用 MemoryStream 时,我发现自己经常将数据复制(因此复制)到一个临时的字节数组中。

我认为这有点浪费资源,因为 MemoryStream 不允许您直接访问底层字节数组。

在这种情况下,MemoryStream 的真正优势是什么?我在某处读到它就像一个内存映射文件。仅在访问时从磁盘获取数据,消耗更少的内存。

真的吗?我不这么认为。也许是 FileStream 的情况?

谢谢你的澄清。

4

2 回答 2

4

对我来说,内存流的主要优点是它可以动态增长,并且为此进行了优化。不得不将它复制出来并复制内存是很痛苦的,但如果您主要使用它是构造一个在进程结束时传递的缓冲区,那么该缺陷在某种程度上被摊销了

我应该补充一点,与 FileStream 相比,MemoryStreams 快得多。它们的大小比 FileStreams 更受限制,因为您通常拥有比 RAM 多得多的磁盘空间。因此,您必须决定是否需要速度或空间。

于 2009-06-12T17:25:14.357 回答
3

您可以使用getBuffer函数获取底层字节缓冲区(但前提是您从提供的字节数组创建了 MemoryStream,如果您希望能够直接操作缓冲区,这很有用)

使用 MemoryStream 的唯一优势是,如果您使用的是基于流的 API,或者您是否需要字节缓冲区能够动态增长。

于 2009-06-12T17:27:18.640 回答