亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

在Parallel中使用DbSet.Add()發現的一系列多線程問題和解決思路詳解

2020-01-24 00:56:39
字體:
來源:轉載
供稿:網友

發現問題

需求很簡單,大致就是要批量往數據庫寫數據,于是打算用Parallel并行的方式寫入,希望能利用計算機多核特性加快程序執行速度。想的很美好,于是快速擼了類似下面的一串代碼:

using (var db = new SmsEntities()){Parallel.For(0, 1000, (i) =>{db.MemberCard.Add(new MemberCard(){CardNo = "NO_" + i.ToString(),Banlance = 0,CreateTime = DateTime.Now,Name = "Test_" + i.ToString(),Status = 1});});db.SaveChanges();}

可意外的是竟然無情的報錯了:

奇葩的是當我再次刷新的時候異常又不一樣了,于是連著刷新好多次,總結出現過的異常有下面這些:

1、 未將對象引用設置到對象的實例。

2、 已添加了具有相同鍵的項。

3、 集合已修改;可能無法執行枚舉操作。

4、 一個 EdmType 不能多次映射到 CLR 類。EdmType“SmsModel.MemberCard”映射了一次以上。

其中1和2是出現最多的,而且所有異常都是出現在Add的時候,各種吃瓜表情~沒辦法,接著一一斷點調試,還是沒找出原因,出于進度考慮,換成了另一種方案,也就是用DbSet的AddRange方法。先在Parallel中累加出一個實體List,然后一次性添加到DbSet中,代碼演變為:

List<MemberCard> list = new List<MemberCard>();using (var db = new SmsEntities()){var result = Parallel.For(0, 1000, (i) =>{list.Add(new MemberCard(){CardNo = "NO_" + i.ToString(),Banlance = 0,CreateTime = DateTime.Now,Name = "Test_" + i.ToString(),Status = 1});});if (result.IsCompleted){db.MemberCard.AddRange(list);db.SaveChanges();}}

然后編譯、測試,沒問題,就先放著了。

分析問題

第二天到公司心里還在糾結這個問題,于是打開頁面輸入生成的數據量1000(真實項目中的循環次數是手動輸入的),點按鈕提交,嗯,又吃瓜般的異常了…:

心想昨天測試都好好的?。ㄆ鋵嵶蛱燧斎氲氖?0,心虛臉...),沒辦法,上斷點吧,一看嚇一跳:

明明循環1000次,結果只有971條數據,而且里面還有為null的,經過多次調試發現這是一個隨機現象,Count是隨機的null也是隨機的,有時出現有時沒有,初步判斷這是一個在多線程情況下引發的一個資源調配異常。So,上MSDN看了一下List的介紹,最后面“線程安全”寫著:

一切貌似都清楚了,于是打算驗證一下結果,加上了鎖,測試結果為:

list里面也沒有再出現null了,確認是因為多線程安全引起的異常。于是想起昨天那個問題是否也是同樣的問題,再上MSDN搜了一下DbContext類和DbSet類,都是這樣說的:

接著就給dbcontext上了鎖,測試,這次總算如我所料,完美運行。但是不解的是最初那幾個異常是如何產生的,List中雖然數量不夠也存在為null的對象,但是并沒有直接爆出異?!,F在只知道是線程問題,再詳細的也搞不清楚,有知道的大神還麻煩指點一下。

尋找解決方案并驗證結論

也想過用Partitioner分區來做,但是仔細一想,雖然分區內部是單線程,但是區與區之間還是多線程的,如果分的太細也就失去了Parallel的意義,只得另尋出路。還好Framework為我們也提供了一些線程安全的泛型集合(比如ConcurrentBag、ConcurrentQueue等),不過其本質還是用了鎖,于是就綜合做了一下單線程list、多線程list加鎖、多線程ConcurrentBag、多線程ConcurrentQueue的性能對比,結果如下:

循環1000次時:

循環10000次時:

循環100000次時:

得出結論就是,在執行次數超大時用線程安全類型會更慢,在執行次數較少時線程安全類型也沒什么優勢。

解決問題

最后在經過仔細測試驗證和考慮項目實際需求(幾乎不可能一次10000)后,去繁從簡,回歸原始,用最簡單直白的寫法單線程循環來完成。雖然一番折騰下來還是回到最初,但是這過程中讓我發現了意料之外問題,然后找到了原因,然后測試驗證,最終得到了最優解決方案。還是那句話,填完坑,你就比之前更強大了!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97超级碰碰碰| 欧美在线视频免费| 在线观看精品自拍私拍| 国产日韩欧美自拍| 久久久中精品2020中文| 亚洲欧洲第一视频| 日韩高清av在线| 久久91亚洲精品中文字幕| 久久久亚洲国产天美传媒修理工| 大荫蒂欧美视频另类xxxx| 亚洲欧洲午夜一线一品| 日韩av免费看网站| 欧美午夜精品久久久久久浪潮| 亚洲精品电影网在线观看| 国产精品mp4| 日韩av在线导航| 国产成人一区二区| 欧美极品少妇xxxxx| 成人福利网站在线观看11| 日韩av在线电影网| 亚洲激情第一页| 精品调教chinesegay| 九九热最新视频//这里只有精品| 日韩av在线播放资源| 奇米成人av国产一区二区三区| 日韩精品一区二区视频| 亚洲人成网站999久久久综合| 亚洲最新av网址| 亚洲国产精品久久久久秋霞蜜臀| 精品免费在线观看| 日韩一级裸体免费视频| 日韩精品视频中文在线观看| 欧美一级黑人aaaaaaa做受| 亚洲国产另类 国产精品国产免费| 亚洲视频视频在线| 欧美精品videofree1080p| 欧美日韩在线视频一区二区| 日韩精品中文字幕视频在线| 黄色一区二区在线| 国产精品午夜一区二区欲梦| 2021久久精品国产99国产精品| 久久影视电视剧免费网站| 亚洲一区二区三区在线视频| 日韩免费电影在线观看| 欧美日韩国产色视频| 国产精品欧美日韩一区二区| 亚洲理论在线a中文字幕| 久久精品久久精品亚洲人| xvideos国产精品| 欧美日韩久久久久| 国语自产精品视频在线看抢先版图片| 国产一区二区美女视频| 国产精品99一区| 欧美激情一级精品国产| 欧美激情精品久久久久久| 欧洲精品在线视频| 一本一本久久a久久精品牛牛影视| 日韩av免费在线观看| 国产精品三级美女白浆呻吟| 日韩少妇与小伙激情| 欧美第一黄网免费网站| 日韩精品视频在线播放| 国产精品视频导航| 欧美激情在线狂野欧美精品| 97久久伊人激情网| 国产精品激情自拍| 中文字幕亚洲精品| 亚洲国产精品va在线看黑人| 日韩电视剧免费观看网站| 精品一区二区电影| 欧美日韩不卡合集视频| 久久99精品视频一区97| 亚洲天堂视频在线观看| 久久人人爽人人爽爽久久| 欧洲亚洲免费视频| 色综合伊人色综合网站| 久久久久国产精品免费| 欧美理论电影在线播放| 日韩中文字幕免费| 亚洲美女又黄又爽在线观看| 国产精品福利在线观看网址| 亚洲福利视频在线| 欧美性猛交xxxx富婆| 91精品国产成人www| 国产精品视频资源| 萌白酱国产一区二区| 久久久这里只有精品视频| 一夜七次郎国产精品亚洲| 麻豆成人在线看| 成人av资源在线播放| 91在线免费看网站| 欧美在线性爱视频| 日韩一级裸体免费视频| 国产精品爽黄69天堂a| 日韩成人av在线| 欧美精品在线观看| 欧美第一黄网免费网站| 亚洲一区二区三区久久| 亚洲欧美国产精品专区久久| 日韩欧美在线视频观看| 亚洲最大的网站| 欧美激情免费在线| 国产综合在线看| 91免费人成网站在线观看18| 成人羞羞国产免费| 中文字幕精品网| 日韩大陆欧美高清视频区| 深夜精品寂寞黄网站在线观看| 秋霞午夜一区二区| 欧美日韩亚洲网| 国产精品久久久久久久久久ktv| 亚洲成人网在线观看| 国产视频久久久久| 91精品国产高清自在线看超| 亚洲一区二区三区sesese| 国产日韩在线看| 国产免费一区二区三区香蕉精| 日韩高清电影免费观看完整| 亚洲第一精品福利| 日韩精品在线看| 日本亚洲精品在线观看| 热re99久久精品国产66热| 丝袜亚洲欧美日韩综合| 92国产精品视频| 亚洲免费电影一区| 国产欧美日韩91| 欧美性xxxx极品hd欧美风情| 日本高清不卡在线| 国产精品久久久久aaaa九色| 久久精品一本久久99精品| 国产丝袜精品视频| 97久久超碰福利国产精品…| 亚洲欧洲国产精品| 大荫蒂欧美视频另类xxxx| 国产精品尤物福利片在线观看| 国产精品久久久久久久久久久新郎| 亚洲电影免费观看高清| 日韩av免费在线观看| 亚洲成人a级网| 日韩亚洲精品视频| 91在线观看免费网站| 久久韩剧网电视剧| 国产成人午夜视频网址| 免费97视频在线精品国自产拍| 国产日韩av在线播放| 97在线视频免费观看| 亚洲精品久久久久国产| 欧美激情亚洲视频| 亚洲欧美另类自拍| 国产精品无码专区在线观看| 亚洲女同精品视频| 欧美国产日韩一区二区三区| 91免费在线视频网站| 中文字幕亚洲欧美日韩高清| 久久久久99精品久久久久| 精品久久久久久久久久久久久| 麻豆国产va免费精品高清在线| 欧美二区乱c黑人| 国产精品户外野外| 国产欧美精品在线| 精品调教chinesegay| 92版电视剧仙鹤神针在线观看| 欧美壮男野外gaytube| 国产精品av在线播放|