有人告诉我为什么 Linq-to-SQL检索数据的速度如此之快? 我使用Linq-to-SQL,EF4,DataSet和MyORM进行了性能测试. Linq-to-SQL总是更快,见下表: Linq-to-SQL = 570毫秒,用于检索50000条记录 DataSet = 2.100毫
我使用Linq-to-SQL,EF4,DataSet和MyORM进行了性能测试.
Linq-to-SQL总是更快,见下表:
> Linq-to-SQL = 570毫秒,用于检索50000条记录
> DataSet = 2.100毫秒,用于检索50000条记录
> EF4 = 1.200毫秒,用于检索50000条记录
> MyORM = 700毫秒,用于检索50000条记录
我使用SQL Server 2005(本地)和单个表进行分析.
MyORM由我实施.是一个使用DataReader和Fasterflect检索数据的简单方法,以填充IList of T的属性.
Linq-to-SQL的策略是什么?
LINQ to SQL执行了许多技巧.如果你自己的ORM正在使用反射,那么你需要缓存它,但我怀疑差异可能是你没有缓存序数.例如代替
while(dataReader.Read()) { ... myNewObj.SomeProperty = dataReader.GetInt32(dataReader.GetOrdinal("SomeField")); ... }
为每个序数创建一个变量并在循环中引用它们:
var someFieldIdx = dataReader.GetOrdinal("SomeField"); ... while(dataReader.Read()) { ... myNewObj.SomeProperty = dataReader.GetInt32(someFieldIdx); ... }
更好的方法是将它们缓存在一些静态变量上.
如果您已经这样做了,您可能希望发布一些实例化对象的ORM代码.