要访问DocumentDB/CosmosDB,我使用的是包Microsoft.Azure.DocumentDB.Core
(v1.3.2(。我在创建和初始化类时注意到DocumentClient
:
var documentClient = new DocumentClient(new Uri(endpointUrl), primaryKey);
await documentClient.OpenAsync();
向终结点发射了许多请求,以获取有关索引和其他信息的信息。确切地说,有 9 个 HTTP 请求在 .OpenAsync()
上发出。这使得创建和激活客户端在性能方面是一项非常昂贵的操作 - 需要长达一秒钟的时间才能将所有请求带回家。
因此,为了减轻这种成本高昂的操作,我DocumentClient
成为一个单例,并在应用程序的生命周期内保留引用。
应用程序 Asp.Net 核心 MVC,这可能会将此对象的引用保留在内存中数天。
问题:是否可以将此对象作为单例保留这么长时间? 如果不是,应该采取什么策略来处理它?或者有没有办法使初始化更便宜(即不发出这些初始请求?
我们也为自己想知道这一点,并发现了这个:
从文档中
SDK 使用提示 #1:在应用程序的生存期内使用单一实例 DocumentDB 客户端 请注意,每个 DocumentClient 实例都是线程安全的,并且在直接模式下运行时执行高效的连接管理和地址缓存。为了通过 DocumentClient 进行高效的连接管理和更好的性能,建议在应用程序的生存期内为每个 AppDomain 使用单个 DocumentClient 实例。
我想这仍然有效,现在你也可以用它解决 CosmosDB。