一切福田,不離方寸,從心而覓,感無不通。

ADO.NET ENTITY FRAMEWORK : (二十) 提升EF执行速度方法

这边分享一下,提升ADO.Net Entity Framework执行速度的几个方法,

技巧一 取得单一数据时,可利用【GetObjectByKey】

在预设中,ObjectContext 在查询数据的时候,并不会以快取对象作为优先查询,
会在每次查询时都向数据库要数据,对效能会产生一定的影响,
因此可以利用【GetObjectByKey】方法来对快取对象进行查询,
但如果使用【GetObejctByKey】方法进行查询,而快取对象又不存在时,
会发生 ObjectNotFoundException 例外,
要避免此问题可利用【TryGetObejctByKey】方法,
如果在快取对象中找不到数据时,会回传 false,

技巧二  重复执行相同查询语法,可利用已编译查询【CompiledQuery】

在我们每次下达 Linq to Entities 向数据库查询数据时,
会先编译成 Entity SQL Language ,再经由 Provider 转换成对应该数据库的语法,
如果我们在循环里,对同一个查询下达1000次的话,就要经过1000次的转换,
这是很浪费效能的,
因此 ADO.Net Entity Framework 提供了 CompiledQuery 类别,
可以进行查询的编译和快取以供重复使用,
这边简单看一个范例

技巧三  只进行查询,而不异动数据时 可利用【MergeOption.NoTracking】

使用【MergeOption.NoTracking】时,
因为不会再 ObjectStateManager 中追踪对象异动状态,
因此查询时效能较好,(系统默认是使用【MergeOption.AppendOnly】)
范例

 

参考连结
CompiledQuery 类别
已编译的查询 (LINQ to Entities)
MergeOption 列举型别
ObjectStateManager
ObjectContext..::.TryGetObjectByKey 方法

 

from:http://it.zhaozhao.info/archives/16465