在多 " /> 97色偷偷,全免费a级毛片免费看,免费视频www

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

技術詳解:三招優化.NET中的鎖(組團)

  在這篇文章中,我將使用三個方法處理樂觀鎖,包括ADO.NET數據集、SQL Server時間戳數據類型和新舊值檢查,首先我們從并發談起,探討5個并發問題,然后從實際出發,利用這三種方法實現樂觀鎖。

  為什么需要鎖?
  在多用戶環境中,大家同時更新相同的記錄可能會引發沖突,這個問題用專業的術語描述就叫做并發性。并發會造成什么樣的沖突?并發主要會導致四種常見的問題,詳細情況請看下表。

  如何解決上述沖突?
  答案是使用樂觀鎖或悲觀鎖,下面將進一步進行闡述。什么是樂觀鎖?顧名思義,樂觀鎖假設多個事務相互不會影響對方,換句話說就是,在樂觀鎖模式下,沒有鎖操作會得到執行,事務只是驗證是否有其它事務修改數據,如果有則進行事務回滾,否則就提交。

  樂觀鎖是如何工作的?
1、實現樂觀鎖的方法有多種,但基本原則都一樣,總是少不了下面五個步驟:
2、記錄當前的時間戳
3、開始修改值
4、在更新前,檢查是否有其他人更新了值(通過檢查新舊時間戳實現)
5、如果不相等就回滾,否則就提交

圖 1 樂觀鎖的工作原理

  實現樂觀鎖的解決方案

  在.NET中,實現樂觀鎖的方法主要有三種:
1、數據集(Dataset):數據集是實現樂觀鎖的默認方法,在更新前它會檢查新舊值。
2、時間戳數據類型(timestamp):在你的表中創建一個timestamp數據類型,在更新時,檢查舊時間戳是否等于新時間戳。
3、直接檢查新舊值:在更新時檢查舊值和新值是否相等,如果不相等就回滾,否則就提交。

  解決方案1:數據集
  正如前面所說的,數據集是處理樂觀鎖的默認方法,下面是一個簡單的快照,在Adapter的update函數上有一個調試點,當我移除斷點運行update函數時,它拋出如下圖所示的并行異常錯誤。

圖 2 Update函數執行時拋出的異常錯誤

  如果你運行后端分析器,你將會看到更新語句檢查當前值和舊值是否相等:

  在這種情況下,我嘗試將“AuthorName”字段值修改為“This isnew”,但更新時會檢查舊值“This is old author”,下面是比較舊值的精簡代碼段:

  解決方案2:使用timestamp數據類型

  SQL Server有一個數據類型是timestamp,它是實現樂觀鎖的另一種途徑,每次更新SQL Server數據時,時間戳會自動產生一個唯一的二進制數值,時間戳數據類型可用來版本化你的記錄更新。

圖 3 timestamp數據類型

  為了實現樂觀鎖,首先需要取得舊的時間戳值,在更新時檢查舊的時間戳值是否等于當前時間戳,如:

  然后檢查是否發生了更新操作,如果沒有發生更新,則使用SQL Server的raiserror產生一系列錯誤消息。

  如果發生了并發沖突,當你如下圖所示這樣調用ExecuteNonQuery時,你應該會看到錯誤傳播。

圖 4 時間戳發生變化,存儲過程產生了錯誤

  解決方案3:檢查舊值和新值
  許多時候,我們只需要檢查相關字段值的一致性,其它字段則可以忽略,在update語句中,我們可以直接做這種比較。

NET技術技術詳解:三招優化.NET中的鎖(組團),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产免费小视频 | 久久精品国产久精国产 | 深爱婷婷 | 国产美女在线精品免费观看 | 欧美亚洲另类色国产综合 | 天堂网站天堂小说 | 免费看一区二区三区 | 国产精品欧美亚洲韩国日本不卡 | 亚洲女人天堂网 | 91在线看片一区国产 | 国产成人综合日韩精品婷婷九月 | 欧美怡红院免费全视频 | 天天爽天天操 | 一色屋成人免费精品网 | 一本色道久久88综合亚洲精品高清 | 一本色道久久88综合亚洲精品高清 | 日本久久精品 | 中文字幕日韩欧美一区二区三区 | 国产在线视频h | 成人在线视频网 | 亚洲成人免费网站 | 好吊日免费视频 | 97色精品视频在线观看免费 | 久久成人国产 | 亚洲人欧洲日韩 | 四虎中文 | 日日摸夜夜添夜夜添人人爽 | 亚洲视频国产视频 | 五月天三级 | 三级黄网| 国产小视频你懂的 | 免费人成网站在线高清 | 激情综合网婷婷 | 国产亚洲精品俞拍视频 | 91精品国产丝袜高跟鞋 | 岛国欧美 | 久久免费精品一区二区 | 日本午夜精华 | 午夜亚洲国产成人不卡在线 | 欧美视频久久久 | 一本色道久久综合亚洲精品加 |