日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EF性能优化(一)

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EF性能优化(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、EF SQL監控工具

目前采用SQLServer 自帶的SQL Server Profiler來監控執行的sql,或者采用第三方插件

MiniProfiler,具體用法可以網上查一下。

2、EF使用SQlQuery 直接寫sql

EF效率低于ADO.NET是因為LINQ-TO-SQL的過程消耗了時間。而使用SqlQuery則可以直接寫SQL語句。

當然,如果你想得到更快的執行速度,你也可以在數據庫上寫存儲過程proc

3、單純的數據查詢?

EF使用AsNoTracking(),無跟蹤查詢技術(查詢出來的數據不可以進行修改)

例如:

?var user = context.user.AsNoTracking().Where(A => A.Id == 1).FirstOrDefault() ;

? ? ? ? ? ? ? ? ? ? student.Name = "小明";

? ? ? ? ? ? ? ? ? ? context.SaveChanges();

?最終不會更新數據庫的信息,所以我們在做數據集合查詢顯示,而又不需要對集合修改并更新到數據庫的時候,

?一定不要忘記加上AsNoTracking。

?如果查詢過程做了select映射就不需要加AsNoTracking。

?如:db.user.Where(t=>t.Name.Contains("小明")).select(t=>new (t.Name,t.Age)).ToList();

4、 EF 使用 AsNonUnicode

示例:

?using (BingFaTestEntities context = new BingFaTestEntities())

? ? ?{

? ? ? ? var a = context.User.AsNoTracking().Where(m => m.Name == DbFunctions.AsNonUnicode("小明")).ToList();


? ? ?}

官方解釋:LINQ to Entities 運算符,它將輸入的字符串視為非 unicode 字符串。

此方法僅適用于 LINQ to Entities 查詢。

作用:不加AsNonUnicode SQL中會有 N,加了AsNonUnicode后,SQL中沒有N ,使用 N 前綴(查詢過程中需要把數據庫默認格式轉化為Unicode 格式來查詢,因此:性能被拉低)

當然如果查詢包含中文字符等建議不要使用該方法

5、EF查詢多字段組合排序

如果涉及多個字段排序不要都是使用 OrderBy,應該是第一個OrderBy后用ThenBy

示例:

?var list = db.User.Where(m => m.Name.StartsWith("明")).OrderBy(m => m.Number).ThenBy(m => m.Name).ToList();

6、EF count(*)的問題(Any的用法)

場景:查詢用戶表中是否有小明這個用戶

var flag1=db.User.Where(m=>m.Name=="小明").Count()>0

var flag2=db.User.Where(m=>m.Name=="小明").FirstOrDefault()!=null

var flag3=db.User.Any(m=>m.Name=="小明").Count()>0

經過測試性能最高的是用Any 所以判斷是否存在盡量采用Any

7、EF的批量刪除和新增、修改

使用EF擴展 Entity Framework Extendeds

示例:db.User.AddRange(list);//批量插入


總結

以上是生活随笔為你收集整理的EF性能优化(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。