我正在使用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 的文章,以便我们也可以在那里澄清它?
希望对您有所帮助!