DocumentDb - 文档客户端生命周期管理

DocumentDb - DocumentClient Lifecycle Management

我将 Xamarin Forms 与共享项目结合使用,以使用 Azure NOSQL DocumentDB 连接到 DocumentDB。我有一个连接到数据库的服务:

public class PaymentService : IPaymentService<Payment>, IDisposable

到目前为止,我一直为客户保持 Class 水平 属性:

public DocumentClient Client { get; set; }

我在 Dispose 方法中处理了它。

在服务的构造函数中 class 我调用了一次 Connect 方法并在我的所有方法中重用它以获取 GetAll、GetSingle、Update、Delete 等

public void Connect()
{
    try
    {
        if (Client == null)
        {
            Client = new DocumentClient(new Uri(SUBSCRIPTION_URL), PRIMARY_KEY);
        }    
    }
    catch (DocumentClientException de)
    {
        ...
    }
    catch (Exception e)
    {
        ...
    }
}

我看过一些文章,其中在每个方法的 using 语句中按请求管理 DocumentClient。

public async Task<bool> Delete(string guid)
{
    using (var client = new DocumentClient(new Uri(SUBSCRIPTION_URL), PRIMARY_KEY))
    {
        var result = await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri(DATABASE_ID, COLLECTION_ID, guid));

        var item = GetSingle(guid);
        if (item != null)
        {
            return false;
        }
        return true;
    }
}   

这两种方法我都试过了,但发现使用 using 语句非常慢。

我的问题是:什么是管理 DocumentClient 生命周期的最佳实践?

DocumentClient 不应在每个请求的基础上使用,而应将其用作应用程序中的单例实例。根据请求创建客户端会增加大量延迟开销。

所以我将 Client 属性 声明为 "static" 并在 PaymentService 的构造函数中对其进行初始化。您可以在 Connect 方法中调用 await Client.OpenAsync() 来 "warm" 客户端,并在每个 public 方法中直接使用 Client 实例来调用 DocumentDB API。

在 PaymentService 的 Dispose 方法中配置 Client。

能否请您指出您在哪些文章中看到应该按请求使用 DocumentClient,以便我们也可以在那里进行澄清?

希望对您有所帮助!