EF效能優化
情況介紹
在專案中,我用EF儲存2W條資料時,花費竟然1小時20分鐘左右,然後我只能……
測試草圖
測試草圖,僅供借鑑看,下面我會詳細總結。
優化方法總結
1.連線保持暢通
意思是不要在需要的時候連線了不需要的時候斷開,需要了又去連線(特殊情況除外),目的在於減少對資料庫的操作。
2.關閉EF的一些配置
EF使用時,會在Config
中配置,對於使用CRUD功能,有一些是用不到的,可以關閉,關閉後的測試效果加快幾秒,略微提升。
檢測對 POCO 實體的屬性和關係所做的更改。 請注意,某些型別的實體(如更改跟蹤代理和派生自 EntityObject
的實體)會自動報告更改,並且這些型別的實體通常不需要呼叫 DetectChanges。 另請注意,通常,DbContext 的許多方法及其相關類會自動呼叫 DetectChanges,這樣一來,便很少需要顯式呼叫此方法。 但通常出於效能原因,可能需要使用 Configuration 中的 AutoDetectChangesEnabled 標誌來關閉對 DetectChanges 的自動呼叫。
3.存入List
EF支援AddRange
,如果需要存5條資料,將這5條資料放入list
一次存入,要比一條一條的存大大的快。
4.查詢資料用Linq
or Lamba
遇到這樣的情況,你需要從資料庫中取某一條特定的資料,然後處理這條資料後存入另一個表,用foreach
是吧,太慢了,換成Linq
,上面草圖中有個備註,再換成lamba
試試。
5.資料放入記憶體
如果要從一個表中多次找資料來使用,那不如第一步先將這個表中所有資料或者需要的那部分特徵資料都先放入記憶體中,從記憶體中讀取的速度,大大的快於運算元據庫,而這目的,也就是減少運算元據庫的次數,耗效能。
6.使用BulkInsert
使用外掛Extended
,使用其中的BulkSaveChanges
代替EF原生態的SaveChanges
來儲存資料,附截圖來引用一段話:
然後我親測結果如圖:
1000條資料,BulkSaveChanges
花費1s,SaveChanges
花費27s……
外掛名:
對於該外掛的一些使用方法,我也附上網址:
http://bulk-operations.net
7.使用SQL語句
如果你對速度還不滿意,可以CRUD,直接使用SQL語句來操作。
可以參考:
http://www.cnblogs.com/LingzhiSun/archive/2011/04/15/EF_Trick2.html#2774378
8.多表只需存一張
遇到這樣的情況,P、T兩張表,關係是1—–(0,1)的關係,你可能會先存入P表的資料,然後foreach
P表的資料,找到對應的給T表的導航屬性賦值,然後存入這條資料到T表,這個問題很嚴重也可笑,但是我身上缺犯了,只需要存 必須存導航資料(T表資料),有關聯的表資料自然存入了(P表)
結尾
上述我總結的方法中,沒有使用SQL語句,原先花費1小時20分鐘的事,現在花費70s,竟然真的做到了。
相關文章
- 淺析EF效能優化優化
- 【前端效能優化】vue效能優化前端優化Vue
- 效能優化優化
- 效能優化案例-SQL優化優化SQL
- 【效能優化】ORACLE資料庫效能優化概述優化Oracle資料庫
- 前端效能優化(JS/CSS優化,SEO優化)前端優化JSCSS
- Android效能優化----卡頓優化Android優化
- 前端效能優化 --- 圖片優化前端優化
- [效能優化]DateFormatter深度優化探索優化ORM
- MySQL 效能優化之索引優化MySql優化索引
- Web效能優化:圖片優化Web優化
- MySQL 效能優化之SQL優化MySql優化
- Android效能優化篇之計算效能優化Android優化
- mysql效能優化MySql優化
- Redis 效能優化Redis優化
- 效能優化有感優化
- react效能優化React優化
- javascript效能優化JavaScript優化
- Javascript 效能優化JavaScript優化
- php效能優化PHP優化
- 前端效能優化前端優化
- JVM效能優化JVM優化
- java效能優化Java優化
- TableView效能優化View優化
- mongodb效能優化MongoDB優化
- Canvas效能優化Canvas優化
- web效能優化Web優化
- MySQL——效能優化MySql優化
- oracle 效能優化Oracle優化
- React 效能優化React優化
- Spark效能優化Spark優化
- 效能優化篇優化
- Openfire 效能優化優化
- UI效能優化UI優化
- javasciprt效能優化Java優化
- sql效能優化SQL優化
- Hive效能優化Hive優化
- iOS效能優化iOS優化