DocumentDB客户端生命周期

时间:2017-06-21 23:40:27

标签: c# azure azure-cosmosdb lifetime-scoping

要访问DocumentDB / CosmosDB,我正在使用包Microsoft.Azure.DocumentDB.Core(v1.3.2)。当我创建并初始化DocumentClient类时,我注意到了:

var documentClient = new DocumentClient(new Uri(endpointUrl), primaryKey);
await documentClient.OpenAsync();

有许多请求被触发到端点以获取有关索引和其他信息的信息。确切地说,.OpenAsync()上有9个HTTP请求。这使得客户端的创建和激活在性能方面成本非常高 - 需要一秒钟才能将所有请求带回家。

因此,为了减轻这种代价高昂的操作,我将DocumentClient作为单身人士,并在应用程序的生命周期内保持参考。

应用程序是Asp.Net Core MVC,这可能会将此对象的引用保留在内存中好几天。

问题:是否可以将此对象保持为单身长度?如果不是,应该采取什么策略来处置它?或者有没有办法使初始化更便宜(即不要做出这些初始请求?)。

1 个答案:

答案 0 :(得分:6)

我们也想知道我们自己也发现了这个:

来自docs

  

SDK使用技巧#1:在应用程序的生命周期中使用单例DocumentDB客户端请注意,每个DocumentClient实例都是线程安全的,并且在直接模式下运行时执行有效的连接管理和地址缓存。为了通过DocumentClient实现高效的连接管理和更好的性能,建议在应用程序的生命周期内为每个AppDomain使用一个DocumentClient实例。

我认为这仍然有效,现在您也可以使用它来处理CosmosDB。