2012-09-14 37 views
0

使用交易編輯內容時,我感覺在加載內容方面有一些延遲 (測試這種情況對我來說有點困難,因爲我不知道如何才能更好地測試它)使用交易時加載內容的延遲

我有Transactions用法有些疑惑:

有我應該瞭解有關交易 一些小問題和事情,這些部分都涉及到這樣一個問題:

我們什麼時候應該使用在事務一個自制的CMS?

我的情況特殊, 注意事項:

  1. 我應該使用任何CMS交易,雖然我們有插入存儲過程,更新,檢索....?
  2. 就在我們正在使用更多的表而不是一個表時使用事務的必要性?

我使用的交易策略:

添加積法(使用添加產品的存儲過程):

  TransactionOptions txOptions = new TransactionOptions(); 
      using (TransactionScope txScope = new TransactionScope 
       (TransactionScopeOption.Required, txOptions)) 
      { 
       try 
       { 
        connection.Open(); 
        command.ExecuteNonQuery(); 
        LastInserted = (int)pInsertedID.Value; 
        txScope.Complete();       
       } 
       catch (Exception ex) 
       { 
        logErrors.Warn(ex.Message); 
       } 
       finally 
       { 
        command.Dispose(); 
        connection.Close(); 
       } 
+0

誰讓CMS不太相關。你似乎只更新一張表,所以tx在這裏沒有做任何事情。 –

回答

0

交易可能有助於確保數據庫的一致性。例如,如果用於添加產品的存儲過程將數據插入到多個表中,並且某些事件沿途失敗,則事務可能有助於回滾整個操作,因此數據庫不含半成品(例如,在相關表格中缺少一些關鍵信息)。

事務範圍(TransactionScope)用於爲代碼塊內運行的任何代碼提供環境隱式事務。這些範圍可能有助於嚴格簡化代碼,但是,它們也可能會增加多線程環境中的複雜性(不幸的是,我對這種情況瞭解不多)。

因此,您提供的代碼可能有助於確保數據庫的一致性,特別是在命令使用多個表時。它可能會增加一些性能開銷;然而,在進行任何優化之前(即嘗試收集關於事務處理速度緩慢的一些量化數據)之前,您最好依靠收集的分析數據而不是任何類型的感受。現代數據庫引擎通常很有效地處理事務;根據我自己的經驗,由於他們的業績開銷,沒有任何交易需要移除。