ある時点で大量の小さな BLOB を単一のコンテナー (1K BLOB を超え、それぞれ 1 Mb 未満) にアップロード (ダウンロード) する必要がある Azure アプリケーションを開発しています。このプロセスを高速化するために、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 は次のように述べています。
この型の public static (Visual Basic では共有) メンバーはすべて、スレッド セーフです。インスタンス メンバーは、スレッド セーフであるとは限りません。
すべてのスレッドで次のコードを実行する必要があるということですか? それとも、一度だけ実行して、異なるスレッド間で CloudBlobContainer の単一のインスタンスを共有することはできますか?
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer =
blobClient.GetContainerReference(ContainerName);
異なるスレッドで CloudBlobContainer の単一のインスタンスを使用できれば幸いです。そうしないと、アップロード (ダウンロード) プロセス全体が大幅に遅くなります。