每次我想从存储中获取 blob 时,是否应该创建 CloudStorageAccount 和 CloudBlobClient 实例?例如,我实现了用于处理 blob 存储的自定义虚拟路径提供程序。最佳设计解决方案是什么:创建 CloudStorageAccount 和 CloudBlobClient 实例一次作为我的自定义虚拟路径提供程序的私有字段,或者使用具有静态(共享)方法的实用程序,每次我想从贮存?从性能的角度来看它有多贵?
1 回答
您可以重用 CloudStorageAccount 和 CloudBlobClient,因为它们没有任何状态(请参阅 Steve Marx 在 Simon 的链接中的回复)。SDK 是开源的,您可以简单地查看 GitHub 上的源代码。
如果您查看 CloudStorageAccount 类,您会发现它的主要目的是确保您最终获得带有 Blob/Queue 和 TableEndpoint 的 StorageCredentials。查看 CloudBlobClient 的构造函数,您可以看到它存储了存储凭据、端点 Uri 和一些默认值。
这里没有任何复杂的东西,也没有任何网络 I/O,这意味着处理非常便宜。但是当您考虑性能时,每一个小优化都会有所帮助,因此您可以安全地将其存储在静态变量中(这可能会影响您的单元测试),或者如果您使用 IoC 容器,您可以选择对整个容器使用单个实例。
现在你需要考虑一些事情。您的 CloudStorageAccount 和 CloudBlobClient 都将保存存储凭据和端点 Uri。但是,如果您通过门户更改此信息(您可能更改了存储帐户的密钥)怎么办?如果您存储 CloudStorageAccount/CloudBlobClient 的单个实例,您可能需要处理RoleEnvironment.Changing事件以使用新的存储帐户信息“刷新”这些对象。