国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價(jià)值的文章主要介紹了.NET使用EF批量插入數(shù)據(jù),一行代碼性能飆升!。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景

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

代碼示例

開始的批量添加代碼:

public async void AddRangeAsync(List<T> entities)
{
    await _dbContext.AddRangeAsync(entities);
????await?_dbContext.SaveChangesAsync();
}

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

public async void AddRangeAsync(List<T> entities)
{
    //批量添加需要將AutoDetectChangesEnabled給位false
    _dbContext.ChangeTracker.AutoDetectChangesEnabled = false;
    await _dbContext.AddRangeAsync(entities);
    await _dbContext.SaveChangesAsync();
}

原理

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

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

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

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

**結(jié)語
**

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

參考資料

[1]?https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.entityframeworkcore.changetracking.changetracker.autodetectchangesenabled?view=efcore-7.0#microsoft-entityframeworkcore-changetracking-changetracker-autodetectchangesenabled文章來源地址http://www.zghlxwxcb.cn/news/detail-540985.html


來源公眾號:DotNet開發(fā)跳槽

到了這里,關(guān)于.NET使用EF批量插入數(shù)據(jù),一行代碼性能飆升!的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Net Core中使用EF Core連接Mysql數(shù)據(jù)庫

    Net Core中使用EF Core連接Mysql數(shù)據(jù)庫

    Entity Framework Core的前身是微軟提供并主推的ORM框架,簡稱EF,其底層是對ADO.NET的封裝。EF支持SQLServer、MYSQL、Oracle、Sqlite等所有主流數(shù)據(jù)庫。 首先是使用時(shí)的幾個(gè)模式的整理及其理解: Code First:根據(jù)代碼自動(dòng)創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu)甚至是數(shù)據(jù)庫,可以支持多庫開發(fā),代碼較少冗余

    2024年01月24日
    瀏覽(28)
  • Pandas:如何讓你的代碼性能飆升

    Pandas:如何讓你的代碼性能飆升

    在數(shù)據(jù)分析相關(guān)的工作中, Pandas 無疑是一個(gè)強(qiáng)大的工具,它的易用性和靈活性廣受青睞。 然而,隨著數(shù)據(jù)量的不斷增長和計(jì)算需求的日益復(fù)雜, Pandas 代碼的性能問題也逐漸浮出水面。 如何讓 Pandas 代碼運(yùn)行得更快、更高效,成為了每一個(gè)人使用者都需要面對的挑戰(zhàn)。 今天

    2024年03月18日
    瀏覽(22)
  • 使用saveOrUpdateBatch實(shí)現(xiàn)批量插入更新數(shù)據(jù)

    saveOrUpdateBatch 是 Hibernate 中的一個(gè)方法,可以用來批量插入或更新數(shù)據(jù)。這個(gè)方法的參數(shù)是一個(gè) List,里面可以存儲(chǔ)多個(gè)實(shí)體對象。當(dāng) Hibernate 執(zhí)行這個(gè)方法時(shí),會(huì)檢查每個(gè)實(shí)體對象是否存在主鍵,如果存在主鍵就執(zhí)行 update 操作,否則執(zhí)行 insert 操作。 使用 saveOrUpdateBatch 的代

    2024年02月11日
    瀏覽(25)
  • Mybatis批量插入/更新性能優(yōu)化思路

    ????????最近在做數(shù)據(jù)寫入服務(wù)的性能優(yōu)化,主要是基于Mybatis-Plus實(shí)現(xiàn)一套批量寫數(shù)據(jù)的服務(wù),不過該服務(wù)是支持整個(gè)平臺(tái)所有需要持久化的業(yè)務(wù)實(shí)體。所以這種服務(wù)不僅僅有insert操作還有update的操作。根據(jù)以往的MySQL數(shù)據(jù)庫寫入經(jīng)驗(yàn),主要總結(jié)了兩套批量插入、批量插入

    2024年04月25日
    瀏覽(22)
  • MySQL---使用索引優(yōu)化、大批量插入數(shù)據(jù)優(yōu)化

    MySQL---使用索引優(yōu)化、大批量插入數(shù)據(jù)優(yōu)化

    1. 使用索引優(yōu)化 索引是數(shù)據(jù)庫優(yōu)化最常用也是最重要的手段之一 , 通過索引通??梢詭椭脩艚鉀Q大多數(shù)的 MySQL 的性能優(yōu)化問題: 1.1?避免索引失效應(yīng)用-全值匹配 該情況下,索引生效,執(zhí)行效率高。 1.2?避免索引失效應(yīng)用-最左前綴法則 1.3?避免索引失效應(yīng)用-其他匹配原則

    2024年02月07日
    瀏覽(24)
  • 性能優(yōu)化實(shí)踐:一行代碼性能提升幾十倍?

    性能優(yōu)化實(shí)踐:一行代碼性能提升幾十倍?

    Part1 問題背景 在一般的互聯(lián)網(wǎng)公司,大家都非常忙碌?;顑菏怯肋h(yuǎn)干不完的。這時(shí)候,我建議先做重要的事情。試想:一個(gè)人永遠(yuǎn)都在做「緊急不重要」的事情,他的產(chǎn)出必然是非常低的。這就是為什么「重要不緊急」在第二象限,僅僅排在「重要且緊急」后面。 所以對于

    2024年04月28日
    瀏覽(19)
  • .net core 創(chuàng)建WebAPI以及使用EF DBFirst框架使用方法與疑問解答(.net 6)

    EF語法包: 生成實(shí)體模型: 修改實(shí)體模型: 把生成的實(shí)體和上下文都輸出到某個(gè)文件夾命令 增加JSON格式腳手架: 若想增加某個(gè)版本json腳手架,需要加入后綴如: 問題與解決方案: 1、問題: Your startup project \\\'XXX\\\' doesn\\\'t reference Microsoft.EntityFrameworkCore.Design. This package is requi

    2024年02月16日
    瀏覽(27)
  • ASP.NET中使用Entity Framework(EF)關(guān)聯(lián)表查詢

    在ASP.NET中使用Entity Framework(EF)進(jìn)行關(guān)聯(lián)表查詢的具體步驟如下: 配置數(shù)據(jù)庫上下文(DbContext):在 DbContext 派生類中,使用 DbSetT 屬性表示每個(gè)實(shí)體對應(yīng)的數(shù)據(jù)庫表。確保每個(gè)實(shí)體類和關(guān)系都正確映射到數(shù)據(jù)庫表。 定義關(guān)聯(lián)表之間的導(dǎo)航屬性:在實(shí)體類中,使用導(dǎo)航屬性表

    2024年02月14日
    瀏覽(20)
  • .net 6 EF Core MySql數(shù)據(jù)庫表生成實(shí)體類命令

    安裝下面這幾個(gè)包 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.Design Pomelo.EntityFrameworkCore.MySql Scaffold-DbContext “server=127.0.0.1;port=3306;database=DB;uid=root;pwd=pwdpwd;sslmode=none;” Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Force -NoOnConfiguring -NoPluralize -Context “D

    2024年02月05日
    瀏覽(24)
  • .NET6 + EF Core + MySQL 創(chuàng)建實(shí)體和數(shù)據(jù)庫、EFCore 數(shù)據(jù)遷移

    .NET6 + EF Core + MySQL 創(chuàng)建實(shí)體和數(shù)據(jù)庫、EFCore 數(shù)據(jù)遷移

    接上期文章《.NET6項(xiàng)目連接數(shù)據(jù)庫方式方法》,有人問了我?guī)讉€(gè)問題,現(xiàn)在就這幾個(gè)問題,拓展延申一下創(chuàng)建實(shí)體類、數(shù)據(jù)庫。把ORM框架和數(shù)據(jù)遷移都寫進(jìn)去。 我的項(xiàng)目是在Linux上創(chuàng)建的,使用的是vscode開發(fā)工具遠(yuǎn)程開發(fā)。為了方便大家閱讀和操作,我將項(xiàng)目down到我的本地電

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包