4

新しい Azure SDK 2.0 ライブラリを使用するように C# ソリューションをアップグレード中です。2.0 ライブラリの重大な変更を考慮して小さな変更を加えましたが、それ以外は同じコードです。ローカル ストレージに対してテストしたところ、すべて正常に動作しているように見えますが、運用環境の Azure BLOB ストレージに対してテストすると、BLOB アイテムが存在するかどうかを確認するだけで非常に時間がかかります。アイテムが存在するかどうかを示すブール値を返すだけで、文字通り 1 分以上かかります。

以下のサンプル コードで、完了するまでに非常に時間がかかる行は「if (!blob.Exists())」です。

    public byte[] GetBlobContent(string blobName)
    {
        if (blobName == "") return null;

        var blobClient = _storageAccount.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference(_containerName);
        var blob = container.GetBlockBlobReference(blobName);
        if (!blob.Exists())
        {
            return null;
        }

        byte[] buffer;
        using (var ms = new MemoryStream())
        {
            blob.DownloadToStream(ms);
            buffer = ms.ToArray();
        }

        return buffer;
    }

以前のように実行するために、コードに加える必要がある追加の変更はありますか?

4

2 に答える 2

1

別の方法として、Exists() チェックをスキップし、blob が存在しない場合は DownloadToStream を失敗させるだけです。「予想される」失敗を処理するには、DownloadToStream の周りに try/catch ブロックが必要です。このアプローチでは、リモート呼び出しを 2 回ではなく 1 回行うだけで済むため、BLOB の読み取りごとにストレージへの往復を節約できます。

于 2013-05-27T18:17:44.720 に答える