ストレージからblobを取得するたびに、CloudStorageAccountインスタンスとCloudBlobClientインスタンスを作成する必要がありますか?たとえば、BLOBストレージを操作するためのカスタム仮想パスプロバイダーを実装しました。最適な設計ソリューションは何ですか:カスタム仮想パスプロバイダーのプライベートフィールドとしてCloudStorageAccountインスタンスとCloudBlobClientインスタンスを一度作成するか、静的(共有)メソッドでユーティリティを使用して、からblobを取得するたびにCloudStorageAccountインスタンスとCloudBlobClientインスタンスを作成しますストレージ?パフォーマンスの観点からどれくらい高価ですか?
1 に答える
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イベントを処理して、これらのオブジェクトを新しいストレージ アカウント情報で「更新」する必要がある場合があります。