【问题标题】:DocumentDB client lifetimeDocumentDB 客户端生命周期
【发布时间】:2017-06-21 23:40:27
【问题描述】:

要访问 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,这可能会将此对象的引用保留在内存中数天。

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

【问题讨论】:

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


    【解决方案1】:

    我们自己也想知道这一点并发现了这一点:

    来自docs

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

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

    【讨论】:

    • 谢谢!我错过了这篇文章。单身!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2018-12-04
    • 2018-04-22
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多