sha*_*oth 15 .net c# file-io memorystream azure
在我的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 );
}
Run Code Online (Sandbox Code Playgroud)
现在唯一的区别是,它是FileStream一个案例而另一个案例,MemoryStream其余部分是相同的.事实证明,它需要大约20秒,FileStream大约需要30秒MemoryStream- 是的,FileStream结果更快.根据\Memory\Available Bytes性能计数器,虚拟机在MemoryStream创建之前具有大约1千兆字节的可用内存,因此不是由于分页.
为什么写入文件的速度要快于MemoryStream?
乔恩可能是其中的佼佼者。最可能的解释是,
不管内存是否更快,你都不应该分配这么大的内存块。请在此处阅读有关LOH 与 SOH 的信息 。
| 归档时间: |
|
| 查看次数: |
2197 次 |
| 最近记录: |