将Azure blob的内容下载为文本字符串花费的时间太长

本文关键字:字符串 时间 文本 blob Azure 下载 | 更新日期: 2023-09-27 18:07:33

我正在开发一个应用程序

  1. 使用简单的HTTP网页(REST方法)从本地机器上传。csv文件到Azure blob存储

  2. 一旦,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;
        }

将Azure blob的内容下载为文本字符串花费的时间太长

为了加快这个过程,您可以做的一件事是将它们分成块来读取,而不是一次读取整个文件。看看DownloadRangeToStream方法。

本质上的想法是,您首先创建一个30 MB (blob大小)的空文件。然后并行地使用DownloadRangeToStream方法下载1MB(或任何您认为合适的大小)块。当这些数据块下载完成后,将流内容放到文件中适当的位置。

几天前我在SO上回答了一个类似的问题:在慢速网络上下载大文件时出现了StorageException。看看我的答案。在这里,块是按顺序下载的,但它应该给你一些关于如何实现块下载的想法。