【发布时间】:2017-03-29 17:16:52
【问题描述】:
我在同一个 blob 服务中有 2 个容器。一个包含一个 VHD,另一个包含一个测试 PDF。
在附加了 VHD 的 VM 中运行进程,我得到以下数字。
VHD 读取:
// VHD = e: drive, copy files
using (FileStream fs = new FileStream(@"e:\various\14681.pdf", FileMode.Open))
using (var mstream = new MemoryStream())
{
byte[] buffer = new byte[32 * 1024];
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0)
{
mstream.Write(buffer, 0, bytesRead);
}
}
// 20MB file = 250ms, 250k file = <1ms
blockBlob.DownloadToStream:
//read blob
//CloudBlockBlob blockBlob = container.GetBlockBlobReference("14681.pdf");
using (var mstream = new MemoryStream())
{
blockBlob.DownloadToStream(mstream);
}
// 20MB file = 700-800ms, 250k file = 40ms
为什么这两个进程的性能会有这么大的差别
【问题讨论】:
-
什么是
E:驱动器:VM 上的临时磁盘?附盘?如果附加磁盘:常规存储?高级存储? -
e:\ 是 VHD,常规(标准)存储。 Blob 位于同一个存储帐户中,但在不同的容器中。
-
不确定为什么您会看到差异,但可能是文件 I/O 的实现方式以及附加磁盘的读取/缓存方式。使用 blob 下载,您可能会受到逐块访问的限制(相对于以并行流下载内容的工具)。注意:如果
e:驱动器是临时驱动器,它很容易解释,因为它是临时的机箱内 SSD,而不是网络连接。