2012-12-26 60 views
1

我想重寫我的程序,該程序當前在WinForms上使用DataSets並將其移至WPF。 目前該程序使用Citrix爲用戶登錄。 現在,當某人正在對數據執行某種操作時,主線程正在對變更提交BI並將其發送回服務器,或從服務器獲取新數據(或修改數據)並將其添加到緩存中。 今天的問題是每次用戶正在處理數據或從服務器收到消息時,鎖的廣泛使用和解鎖。 我正在尋找一個數據實體或某種方式來在我的客戶端工作多線程。 這意味着我希望每個線程都能夠在數據上提交BI,並在與所有其他用戶及其更改同步的同時與服務器通信。多線程數據實體

我看着EF,但它不是線程安全的意義時更新將我需要的時候用戶處理數據的EF裏面鎖住我的EF和更新,並再次到達服務器。

有沒有辦法更容易地做到這一點,而無需讓程序員每次鎖定/解鎖數據?

回答

2

如果您正在創建多線程應用程序,則無法避免鎖定。

這裏是你可以同時使用EF申請幾件事:

  1. 不要使用鎖獨特的背景下(無單例模式)。
  2. 爲每個請求和一些併發實例化和配置一個上下文 控制系統
  3. 儘可能避免鎖定上下文。
+0

我的問題是,我想避免需要每次有更新時鎖住我的EF。 說我只在我的客戶端,它運行多個用戶,每個用戶在他自己的線程。 我的GUI線程是一個。 說用戶A正在觀看網格內的數據A1,而用戶B正在編輯相同的數據。 每次有人更新我不會遇到異常的數據時,如何在不使用鎖的情況下輕鬆確定? 在這個過程中沒有涉及數據庫,我只是希望更新將發佈給其他用戶。 –