五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

.NET使用EF批量插入數(shù)據(jù),一行代碼性能飆升!

2023-07-10 12:41 作者:波波0077  | 我要投稿

背景

小編最近接到一個(gè)任務(wù),批量獲取內(nèi)部網(wǎng)站用TXT生成的日志,在閑時(shí)把日志插入到MySql數(shù)據(jù)庫(kù)做分析。為了快速開發(fā)小編選擇了Entity Framework Core,很快開發(fā)完成了。測(cè)試數(shù)據(jù)不是很多,批量插入數(shù)據(jù)很快完成,效率很高。但是部署到線上問(wèn)題來(lái)了,最開始也挺快,越到后面越慢,慢的無(wú)法接受。于是查詢了一下官網(wǎng)和某度,只需加一句代碼就可以讓EF批量插入數(shù)據(jù)飆升。

代碼示例

開始的批量添加代碼:

在以上方法增加一行,如下:


原理

微軟的解釋:“AutoDetectChangesEnabled默認(rèn)值為 true。這可確保上下文在執(zhí)行操作(例如 SaveChanges() 或返回更改跟蹤信息)之前了解對(duì)跟蹤實(shí)體實(shí)例所做的任何更改。如果禁用自動(dòng)檢測(cè)更改, DetectChanges() 則必須確保在修改實(shí)體實(shí)例時(shí)調(diào)用 。如果不這樣做,可能會(huì)導(dǎo)致某些更改在返回或返回過(guò)時(shí)的更改跟蹤信息期間 SaveChanges() 無(wú)法持久保存”[1]。

這是啥意思呢?ChangeTracker的AutoDetectChangesEnabled屬性是Entity Framework中的一個(gè)屬性,用于控制是否自動(dòng)檢測(cè)實(shí)體的更改。默認(rèn)情況下,AutoDetectChangesEnabled屬性的值為true,即自動(dòng)檢測(cè)更改。每次對(duì)實(shí)體進(jìn)行更改(添加、刪除、更新)時(shí),Entity Framework會(huì)自動(dòng)檢測(cè)這些更改,并將其標(biāo)記為“已更改”。這樣,在調(diào)用SaveChanges方法時(shí),Entity Framework會(huì)自動(dòng)將這些更改應(yīng)用到數(shù)據(jù)庫(kù)中。

當(dāng)AutoDetectChangesEnabled屬性的值為true時(shí),將對(duì)EF的性能造成一定的影響,尤其是批量插入數(shù)據(jù)。對(duì)于插入操作,無(wú)論AutoDetectChangesEnabled的值為true還是false,都可以成功插入數(shù)據(jù)。因?yàn)椴迦氩僮鞅旧砭褪且环N新增操作,無(wú)需進(jìn)行實(shí)體的更改檢測(cè)。所以在批量插入時(shí),建議把AutoDetectChangesEnabled設(shè)置為false。

設(shè)置為false具體對(duì)操作的數(shù)據(jù)有沒(méi)有影響呢?答案是肯定的,分情況。如果插入數(shù)據(jù)后有上下文操作,那么上下文不會(huì)自動(dòng)更新實(shí)體的狀態(tài),如果沒(méi)有后續(xù)操作可以忽略。這就需要手動(dòng)調(diào)用DetectChanges方法或?qū)?shí)體狀態(tài)設(shè)置為“已更改”才能使上下文與數(shù)據(jù)庫(kù)同步。建議批量插入數(shù)據(jù)結(jié)束時(shí),把AutoDetectChangesEnabled的值改為true。

**結(jié)語(yǔ)
**

本文講述了.NET用EF批量插入數(shù)據(jù),改進(jìn)性能的簡(jiǎn)單方法。當(dāng)然還有很多方法,比如可以使用EF批量添加擴(kuò)展,可以在EF中執(zhí)行SQL插入語(yǔ)句,還可以用EF執(zhí)行存儲(chǔ)過(guò)程的方式批量添加(SQL Server實(shí)驗(yàn)過(guò),MySql未實(shí)驗(yàn))等,大家還有啥好方法可以留言。日志分析建議大家用mangodb或者ES等數(shù)據(jù)庫(kù),本案例只是臨時(shí)數(shù)據(jù)分析。希望本文對(duì)你有所收獲,歡迎留言或者吐槽。

參考資料

[1]?https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.entityframeworkcore.changetracking.changetracker.autodetectchangesenabled?view=efcore-7.0#microsoft-entityframeworkcore-changetracking-changetracker-autodetectchangesenabled

來(lái)源公眾號(hào):DotNet開發(fā)跳槽


.NET使用EF批量插入數(shù)據(jù),一行代碼性能飆升!的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
武宁县| 北宁市| 渝中区| 都匀市| 堆龙德庆县| 浦江县| 清丰县| 如东县| 紫阳县| 遂宁市| 莱芜市| 睢宁县| 武定县| 揭西县| 金湖县| 怀远县| 昌邑市| 阳春市| 湖州市| 哈尔滨市| 吉林市| 永靖县| 册亨县| 万山特区| 沾化县| 西乌| 南宁市| 扎兰屯市| 丽江市| 扬州市| 南靖县| 正镶白旗| 道孚县| 阿拉善盟| 鄂伦春自治旗| 东乡族自治县| 高密市| 桐庐县| 靖宇县| 揭阳市| 宁阳县|