24

ストレージからblobを取得するたびに、CloudStorageAccountインスタンスとCloudBlobClientインスタンスを作成する必要がありますか?たとえば、BLOBストレージを操作するためのカスタム仮想パスプロバイダーを実装しました。最適な設計ソリューションは何ですか:カスタム仮想パスプロバイダーのプライベートフィールドとしてCloudStorageAccountインスタンスとCloudBlobClientインスタンスを一度作成するか、静的(共有)メソッドでユーティリティを使用して、からblobを取得するたびにCloudStorageAccountインスタンスとCloudBlobClientインスタンスを作成しますストレージ?パフォーマンスの観点からどれくらい高価ですか?

4

1 に答える 1

21

CloudStorageAccount と CloudBlobClient は状態を保持しないため、再利用できます (Simon のリンクにある Steve Marx の返信を参照してください)。SDK はオープン ソースであり、GitHub でソースを見ることができます。

CloudStorageAccount クラスを見ると、その主な目的は、Blob/Queue と TableEndpoint を使用して StorageCredentials を確実に作成することであることがわかります。CloudBlobClient のコンストラクターを見ると、ストレージ資格情報、エンドポイント Uri、およびいくつかの既定値が格納されていることがわかります。

ここには複雑なことは何もなく、処理が非常に安価であることを意味するネットワーク I/O もありません。しかし、パフォーマンスについて考えると、あらゆる小さな最適化が役立つので、それを静的変数に安全に格納することができます (これは単体テストに影響を与える可能性があります)。または、IoC コンテナーを使用する場合は、コンテナー全体に対して単一のインスタンスを使用することを選択できます。

ここで、何かを考慮する必要があります。CloudStorageAccount と CloudBlobClient の両方が、ストレージ資格情報とエンドポイント URI を保存します。しかし、ポータルを介してこの情報を変更した場合 (ストレージ アカウントのキーを変更した可能性があります) はどうでしょうか。CloudStorageAccount/CloudBlobClient の 1 つのインスタンスを格納する場合は、RoleEnvironment.Changingイベントを処理して、これらのオブジェクトを新しいストレージ アカウント情報で「更新」する必要がある場合があります。

于 2012-05-30T10:22:58.883 に答える