gpt4 book ai didi

c# - 为什么写入 MemoryStream 比写入文件慢?

转载 作者:可可西里 更新时间:2023-11-01 07:47:57 24 4
gpt4 key购买 nike

在我的 Azure 角色代码中,我下载了一个 400 MB 的文件,该文件被分成 10 MB 的 block 并存储在 Blob 存储中。我使用 CloudBlob.DownloadToStream() 进行下载。

我尝试了两种选择。一种是使用 FileStream - 我创建一个“写入”FileStream 并将 block 一个接一个地下载到同一个流中,而无需倒回,因此我最终得到了一个原始文件。另一个选项是通过传递一个比原始文件大小稍大的数字作为流大小(以避免重新分配)来创建一个 MemoryStream 对象,并将 block 下载到该 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 之前,虚拟机大约有 1 GB 可用内存,因此这不是由于分页所致。

为什么写入文件比写入 MemoryStream 更快?

最佳答案

乔恩可能是其中的佼佼者。可能的解释是,

  1. 内存实际上由虚拟机管理程序调出到磁盘。
  2. 虚拟机管理程序交换文件位于速度较低的磁盘(例如本地磁盘)上。
  3. 虚拟机的文件系统位于快速企业磁盘(例如 SAN)上。

无论内存是否更快,您都不应该分配这么大的内存块。阅读 LOH vs SOH在这里。

关于c# - 为什么写入 MemoryStream 比写入文件慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12006647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com