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,以便我们也可以在那里进行澄清?
希望对您有所帮助!
我将 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,以便我们也可以在那里进行澄清?
希望对您有所帮助!