【實用教程】EF性能調優篇+輔助監控軟件

1、EF SQL監控工具

目前採用SQLServer 自帶的SQL Server Profiler來監控執行的sql,
或者採用第三方插件MiniProfiler,具體用法可以網上查一下。

2、EF使用SQlQuery 直接寫sql

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

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

3、單純的數據查詢AsNoTracking()

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的批量刪除和新增、修改_Entity Framework Extendeds

使用EF擴展 Entity Framework Extendeds

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章