我有一个函数,它生成并返回一个MemoryStream.生成后,MemoryStream的大小是固定的,我不再需要写入它只需要输出.例如,写入MailAttachment或写入数据库.
交付物体的最佳方法是什么?MemoryStream还是Byte数组?如果我使用MemoryStream,我必须在读取后重置位置.
Mar*_*ell 51
如果你必须将所有数据保存在内存中,那么在许多方面,选择是任意的.如果您有现有的代码,其操作上Stream
,则MemoryStream
可能会更方便,但如果你返回byte[]
你可以随时只是包装在一个new MemoryStream(blob)
反正.
它可能还取决于它有多大以及它持有多长时间; MemoryStream
可以超大,这有利有弊.byte[]
如果你持有一段时间的数据,强制它可能是有用的,因为它会削减任何多余的数据; 但是,如果您只是简单地保留它,则可能会适得其反,因为它会强制您在创建新副本时复制大多数(绝对最少:一半)数据.
所以; 它在很大程度上取决于背景,用法和意图.在大多数情况下,"无论哪种工作,而且清晰简单"都可能就足够了.如果数据特别大或持续较长时间,您可能需要刻意调整一下.
该byte[]
方法的另一个优点是:如果需要,多个线程可以一次安全地访问它(只要它们正在读取) - 这是不正确的MemoryStream
.但是,这可能是一个错误的优势:大多数代码不需要byte[]
从多个线程访问.
小智 6
MemoryStream 类用于向流中添加元素。有一个文件指针;它模拟随机访问,这取决于它是如何实现的。因此,MemoryStream 并非旨在随时访问任何项目。
字节数组允许在任何时间随机访问任何元素,直到它被取消分配。
在字节 [] 旁边,MemoryStream 存在于内存中(取决于类的名称)。那么最大分配大小为 4 GB。
最后,如果您需要访问任何索引号处的数据,请使用字节 []。否则,MemoryStream 旨在处理需要流作为输入的其他内容,而您只有一个字符串。
归档时间: |
|
查看次数: |
23103 次 |
最近记录: |