我们有一个在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生成的同一页面立即加载。
有没有办法加快这个?
感谢名单,
答案 0 :(得分:3)
在上面的代码中,我反复获得对容器的引用。这会导致严重的性能损失。要解决这个问题,我将容器存储在私有缓存中并只获取一次。