我正在使用带有共享项目的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生命周期的最佳做法是什么?
答案 0 :(得分:3)
DocumentClient不应该基于每个请求使用,而应该将其用作应用程序中的单例实例。创建每个请求的客户端将增加延迟的大量开销。
所以我将Client属性声明为&#34; static&#34;并在PaymentService的构造函数中初始化它。你可以在Connect方法中调用等待Client.OpenAsync()来&#34; warm&#34;在客户端和每个公共方法中直接使用Client实例来调用DocumentDB API。
将客户端置于PaymentService的Dispose方法中。
请您指出您在每次请求时使用DocumentClient的文章,以便我们在那里澄清一下吗?
希望有所帮助!