我正在开发一个 azure 应用程序,它需要在某个时候将大量小 blob 上传(下载)到单个容器(超过 1k blob,每个小于 1 Mb)。为了加快这个过程,我想使用多个线程来上传(下载)blob。
这是我用于上传单个 blob 的例程:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer =
blobClient.GetContainerReference(ContainerName);
blobContainer.CreateIfNotExist();
CloudBlob blob = blobContainer.GetBlobReference(Id);
blob.UploadByteArray(Data);
对于上面代码中使用的每种类型,MSDN 说明如下:
此类型的任何公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。
这是否意味着我需要在每个线程中执行以下代码?或者也许我只能执行一次并在不同线程之间共享 CloudBlobContainer 的单个实例?
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer =
blobClient.GetContainerReference(ContainerName);
我真的很乐意在不同的线程中使用 CloudBlobContainer 的单个实例,否则它会严重减慢整个上传(下载)过程。