从性能的角度来看,创建CloudStorageAccount或CloudBlobClient实例的成本有多高?
从性能的角度来看,创建CloudStorageAccount或CloudBlobClient实例的成本有多高?
每次我想从存储中获取blob时,是否应该创建CloudStorageAccount和CloudBlobClient实例?
例如,我实现了一个用于与blob存储一起工作的自定义虚拟路径提供程序。最佳的设计方案是:将CloudStorageAccount和CloudBlobClient实例作为自定义虚拟路径提供程序的私有字段进行一次创建,还是使用具有静态(共享)方法的工具,每次我想从存储中获取blob时都会创建CloudStorageAccount和CloudBlobClient实例?从性能角度来看,这样做会有多大的开销?
通过查看CloudStorageAccount类的构造函数,可以看到其主要目的是确保您能够获得具有Blob/Queue和TableEndpoint的StorageCredentials。查看CloudBlobClient的构造函数,可以看到它存储了存储凭据、终结点Uri和一些默认值。这里没有任何复杂的东西,也没有任何网络I/O,意味着处理非常便宜。但是在考虑性能时,每一个小的优化都有助于提升性能,因此您可以安全地将其存储在一个静态变量中(这可能会影响您的单元测试),或者如果您使用一个IoC容器,您可以选择为整个容器使用一个单一实例。
现在您需要考虑一些事情。无论是CloudStorageAccount还是CloudBlobClient都将保存存储凭据和终结点Uri。但是如果您通过门户更改这些信息(例如更改了存储账户的密钥),那么如果您存储了CloudStorageAccount/CloudBlobClient的单个实例,您可能需要处理Changing事件,以便使用新的存储账户信息“刷新”这些对象。
那为什么我会收到错误:stackoverflow.com/questions/24229288/…?
不要重用CloudBlobClient,因为它不是线程安全的(我曾经发现流被错误地写入了错误的Blob)。我认为您可以重用CloudStorageAccount,只需每次创建一个新的CloudBlobClient即可。