2017-04-15 130 views
0

我使用Xamarin Forms和Shared項目使用Azure NOSQL DocumentDB連接到DocumentDB。我有一個連接到數據庫的服務:DocumentDb - DocumentClient生命週期管理

public class PaymentService : IPaymentService<Payment>, IDisposable 

到目前爲止,我一直保持着類級別屬性爲客戶:

public DocumentClient Client { get; set; } 

我在Dispose方法處置。

服務類有一次我叫一個連接方法,在我所有的方法GETALL,GetSingle,更新重用它的構造函數,刪除等

public void Connect() 
{ 
    try 
    { 
     if (Client == null) 
     { 
      Client = new DocumentClient(new Uri(SUBSCRIPTION_URL), PRIMARY_KEY); 
     }  
    } 
    catch (DocumentClientException de) 
    { 
     ... 
    } 
    catch (Exception e) 
    { 
     ... 
    } 
} 

我已經看到了一些文章,其中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生命週期的最佳實踐?

回答

3

不應該在每個請求的基礎上使用DocumentClient,而應該將其用作應用程序中的單例實例。創建客戶端每請求會增加延遲的開銷。

所以我會聲明客戶端屬性爲「靜態」並在PaymentService的構造函數中初始化它。您可以調用Connect方法中的Client.OpenAsync()方法來「加熱」客戶端,並在每個公共方法中直接使用Client實例調用DocumentDB API。

將客戶端配置爲PaymentService的Dispose方法。

請您指出您發現DocumentClient應該按照每個請求使用的文章,以便我們可以在那裏澄清它?

希望有幫助!

+0

嘿那裏謝謝你的答案 - 我走了你描述的路線。我看到的文章是從MS - https://msdn.microsoft.com/library/azure/microsoft.azure.documents.client.documentclient.upsertdocumentasync.aspx我可能已經把它取出了上下文。單實例是基於性能的方式。 –