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