我有一个函数,它生成并返回一个MemoryStream.生成后,内存流的大小是固定的,我不再需要写入它,只需要输出.例如,写邮件附件或写数据库.
拿东西最好的方式是什么?MemoryStream还是Byte Array?如果我使用MemoryStream,我必须在读取后重置位置.
我有一个函数,它生成并返回一个MemoryStream.生成后,内存流的大小是固定的,我不再需要写入它,只需要输出.例如,写邮件附件或写数据库.
拿东西最好的方式是什么?MemoryStream还是Byte Array?如果我使用MemoryStream,我必须在读取后重置位置.
如果必须将所有数据保存在内存中,那么在许多方面, Select 是任意的.如果您有现有的代码that operates on 100,那么MemoryStream
可能更方便,但是如果您返回byte[]
,那么您总是可以将其包装在new MemoryStream(blob)
anyway中.
这也可能取决于它有多大,你持有它的时间有多长;MemoryStream
可以是oversized,这是有好处也有坏处的.如果您将数据保留一段时间,则强制将其设置为byte[]
可能会很有用,因为它将削减任何多余的数据;但是,如果您只短暂地保留它,则可能会适得其反,因为在创建新副本时,它将强制您将大部分数据(至少是绝对最小:一半)设置为duplicate.
因此,这在很大程度上取决于上下文、用法和意图.在大多数情况下,"无论哪个有效,并且清晰、简单"可能就足够了.如果数据特别大或保存时间较长,您可能希望故意对其进行一些调整.
byte[]
方法的另一个优点是:如果需要,多个线程可以同时安全地访问它(只要它们正在读取数据)——MemoryStream
则不是这样.然而,这可能是一个错误的优势:大多数代码无法从多个线程访问byte[]
.