将Azure blob的内容下载为文本字符串花费的时间太长
本文关键字:字符串 时间 文本 blob Azure 下载 | 更新日期: 2023-09-27 18:07:33
我正在开发一个应用程序
-
使用简单的HTTP网页(REST方法)从本地机器上传。csv文件到Azure blob存储
-
一旦,csv文件上传,我获取流以更新我的数据库
. csv文件大约30 MB,上传到blob需要2分钟,但是读取流需要30分钟。能否提供输入以提高速度?下面是用来从文件中读取流的代码片段:https://azure.microsoft.com/en-in/documentation/articles/storage-dotnet-how-to-use-blobs/
public string GetReadData(string filename)
{
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["StorageConnectionString"]);
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference(System.Web.Configuration.WebConfigurationManager.AppSettings["BlobStorageContainerName"]);
// Retrieve reference to a blob named "filename"
CloudBlockBlob blockBlob2 = container.GetBlockBlobReference(filename);
string text;
using (var memoryStream = new MemoryStream())
{
blockBlob2.DownloadToStream(memoryStream);
text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
}
return text;
}
为了加快这个过程,您可以做的一件事是将它们分成块来读取,而不是一次读取整个文件。看看DownloadRangeToStream
方法。
本质上的想法是,您首先创建一个30 MB (blob大小)的空文件。然后并行地使用DownloadRangeToStream
方法下载1MB(或任何您认为合适的大小)块。当这些数据块下载完成后,将流内容放到文件中适当的位置。
几天前我在SO上回答了一个类似的问题:在慢速网络上下载大文件时出现了StorageException。看看我的答案。在这里,块是按顺序下载的,但它应该给你一些关于如何实现块下载的想法。