性能问题:生成许多blob共享访问签名非常慢

时间:2014-06-24 20:50:49

标签: performance azure-storage-blobs

我们有一个在azure上运行的网站。我们使用azure存储服务来存储我们的静态内容(图像,视频等)。

我们有一个页面,其中我们显示一个包含项目列表的表格,并为每个项目显示缩略图图像。缩略图存储在存储服务中,我们使用代码为每个缩略图分配一个共享访问签名,如下所示:

...
CloudStorageAccount storageAccount;
if (!CloudStorageAccount.TryParse(connectionString, out storageAccount))
{
    throw new Exception("...");
}
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference(blobName);

var policy = new SharedAccessBlobPolicy
{
    Permissions = SharedAccessBlobPermissions.Read,
    SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
    SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10)
};

var signature = blob.GetSharedAccessSignature(policy);

return blob.Uri.AbsoluteUri + signature;
...

这是在循环中完成的,为列表中的每个图像分配不同的SAS。然而,随着名单的增长,性能下降幅度非常大。对于更多10-20个图像,页面需要很长时间才能加载)。没有SAS生成的同一页面立即加载。

有没有办法加快这个?

感谢名单,

1 个答案:

答案 0 :(得分:3)

在上面的代码中,我反复获得对容器的引用。这会导致严重的性能损失。要解决这个问题,我将容器存储在私有缓存中并只获取一次。