Linq-to-SQL数据检索速度比较

时间:2012-02-08 19:31:26

标签: performance entity-framework linq-to-sql orm dataset

有人告诉我为什么Linq-to-SQL检索数据的速度如此之快?

我使用Linq-to-SQLEF4DataSetMyORM进行了效果测试。

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有这种表现的策略是什么?

1 个答案:

答案 0 :(得分:2)

LINQ to SQL执行了许多技巧。如果你自己的ORM正在使用反射,那么你需要缓存它,但我怀疑差异可能是你没有缓存序数。

e.g。而不是

while(dataReader.Read()) {
    ...
    myNewObj.SomeProperty = dataReader.GetInt32(dataReader.GetOrdinal("SomeField"));
    ...
}

为每个序数创建一个变量并在循环中引用它们:

var someFieldIdx = dataReader.GetOrdinal("SomeField");
...
while(dataReader.Read()) {
    ...    
    myNewObj.SomeProperty = dataReader.GetInt32(someFieldIdx);
    ...
}

更好的方法是将它们缓存在一些静态变量上。

如果您已经这样做了,您可能希望发布一些实例化对象的ORM代码。