在多 " /> 亚洲毛片在线观看,精品999,jlzzjlzz亚洲日本少妇

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

技術詳解:三招優化.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视频网址 | 精品久久久久久亚洲精品 | 亚洲aⅴ | 四虎伊人 | 亚洲精品视频免费观看 | 亚洲不卡在线观看 | 日本不卡免费新一二三区 | 免费黄色大片 | 精品国产乱码久久久久久蜜臀 | 婷婷二区 | 天天综合国产 | 精品久久久久久亚洲国产800 | 国产精品久久久久久久7电影 | 国产精品福利在线 | 成人一区二区三区 | 91午夜在线 | 四虎影院在线观看av | 爱爱免费视频 | 国产精品久久久久久久免费观看 | 欧洲成人 | 看片91 | 男女激情网站免费 | 男人久久天堂 | 色一级| 久久久久综合 | 欧美激情综合五月色丁香小说 | 亚洲欧美日韩中文字幕一区二区三区 | 午夜三级视频 | 欧美性久久 | 午夜精品久久久久久久久久久久 | 99日韩| 日韩欧美中文字幕在线视频 | 久久久久国产精品午夜一区 | av永久免费 |