在我的Azure角色代码中,我下载了一个400兆字节的文件,该文件被分成10兆字节的块并存储在Blob存储中。我使用
我尝试了两个选项。第一个选项是使用
以下是一些伪代码:
为什么写入文件比写入
CloudBlob.DownloadToStream()
进行下载。我尝试了两个选项。第一个选项是使用
FileStream
- 我创建一个“写”FileStream
,将每个块逐一下载到同一流中,而不需要重置,最终得到原始文件。另一个选项是通过传递略大于原始文件大小的数字作为流大小(以避免重新分配),创建一个MemoryStream
对象,并将这些块下载到MemoryStream
中 - 这样我就得到了一个保存原始文件数据的MemoryStream
。以下是一些伪代码:
var writeStream = new StreamOfChoice( params );
foreach( uri in urisToDownload ) {
blobContainer.GetBlobReference( uri ).DownloadToStream( writeStream );
}
现在唯一的区别是一个情况下使用了FileStream
,另一个情况下使用了MemoryStream
,其他都相同。结果发现使用FileStream
大约需要20秒钟,而使用MemoryStream
则需要30秒钟 - 是的,FileStream
实际上更快。根据\Memory\Available Bytes
性能计数器,在创建MemoryStream
之前,虚拟机当前有大约1GB的可用内存,因此这并不是由于分页造成的。为什么写入文件比写入
MemoryStream
更快呢?