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



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

public class PaymentService : IPaymentService<Payment>, IDisposable

到目前为止,我一直在为客户保留一个类级属性:

public DocumentClient Client { get; set; }

我在处置方法中处理。

在Service类的构造函数中,我调用一次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)
    {
        ...
    }
}

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

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,而应将其用作应用程序中的单一实例。为每个请求创建客户端会增加大量延迟开销。

所以我将客户端属性声明为"静态",并在支付服务的构造函数中初始化它。您可以在 Connect 方法中调用 await Client.OpenAsync(( 来"预热"客户端,并在每个公共方法中直接使用 Client 实例来调用 DocumentDB API。

在付款服务的处置方式中处置客户。

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

希望对您有所帮助!

最新更新