从性能角度创建CloudStorageAccount或CloudBlobClient实例的成本有多高?

ete*_*ity 20 performance azure

我是否应该在每次想要从存储中获取blob时创建CloudStorageAccount和CloudBlobClient实例?例如,我实现了自定义虚拟路径提供程序以使用blob存储.什么是最好的设计解决方案:创建CloudStorageAccount和CloudBlobClient情况下,一次作为我的自定义虚拟路径提供的私有字段,或使用静态的效用,创造CloudStorageAccount和CloudBlobClient实例(共享)方法,我想从一个blob每次存储?从性能的角度来看它有多贵?

San*_*tia 17

您可以重复使用CloudStorageAccount和CloudBlobClient,因为它们没有状态(请参阅Steve的回复,参见Simon的链接).SDK是开源的,您只需查看GitHub上的源代码即可.

如果您查看CloudStorageAccount类,您可以看到它的主要目的是确保您最终使用Blob/Queue和TableEndpoint的StorageCredentials.查看CloudBlobClient的构造函数,您可以看到它存储了存储凭据,端点Uri和一些默认值.

这里没有任何复杂的东西,没有任何网络I/O意味着处理非常便宜.但是当您考虑性能时,每个小优化都可以提供帮助,因此您可以安全地将其存储在静态变量中(这可能会影响您的单元测试),或者如果您使用IoC容器,则可以选择对整个容器使用单个实例.

现在你需要考虑一些事情.您的CloudStorageAccount和CloudBlobClient都将保存存储凭据和端点Uri.但是,如果您通过门户网站更改此信息(您可能更改了存储帐户的密钥)该怎么办?如果存储CloudStorageAccount/CloudBlobClient的单个实例,则可能需要处理RoleEnvironment.Changing事件以使用新的存储帐户信息"刷新"这些对象.

  • 不要重复使用CloudBlobClient,因为它不是线程安全的(我实际上发现了将流写入错误Blob的困难方式)。我认为您可以重复使用CloudStorageAccount并每次都创建一个新的CloudBlobClient。 (2认同)