DocumentDb - DocumentClient生命周期管理

时间:2017-04-15 02:30:41

标签: xamarin.forms lifecycle azure-cosmosdb

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

public DocumentClient Client { get; set; }

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

public void Connect()
{
    try
    {
        if (Client == null)
        {
            Client = new DocumentClient(new Uri(SUBSCRIPTION_URL), PRIMARY_KEY);
        }    
    }
    catch (DocumentClientException de)
    {
        ...
    }
    catch (Exception e)
    {
        ...
    }
}
我在Dispose方法中处理的

在Service类的构造函数中,我调用一次Connect方法,并在GetAll,GetSingle,Update,Delete等所有方法中重用它。

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;
    }
}   

我已经看到一些文章,其中每个请求在使用语句的每个方法中管理DocumentClient。

listClient

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

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

1 个答案:

答案 0 :(得分:3)

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

所以我将Client属性声明为&#34; static&#34;并在PaymentService的构造函数中初始化它。你可以在Connect方法中调用等待Client.OpenAsync()来&#34; warm&#34;在客户端和每个公共方法中直接使用Client实例来调用DocumentDB API。

将客户端置于PaymentService的Dispose方法中。

请您指出您在每次请求时使用DocumentClient的文章,以便我们在那里澄清一下吗?

希望有所帮助!