Performance Linq到SQL数据检索速度比较

Performance Linq到SQL数据检索速度比较,performance,entity-framework,linq-to-sql,orm,dataset,Performance,Entity Framework,Linq To Sql,Orm,Dataset,有人告诉我为什么linqtosql检索数据这么快吗 我使用linqtosql、EF4、DataSet和MyORM进行了性能测试 Linq to SQL总是更快,请参见下表: Linq to SQL=570毫秒检索50000条记录 数据集=2.100毫秒以检索50000条记录 EF4=1.200毫秒检索50000条记录 MyORM=700毫秒检索50000条记录 我使用SQLServer2005(本地)和一个表进行分析 MyORM由我实现。是一种使用DataReader和Fasterflect

有人告诉我为什么
linqtosql
检索数据这么快吗

我使用
linqtosql
EF4
DataSet
MyORM
进行了性能测试

Linq to SQL
总是更快,请参见下表:

  • Linq to SQL
    =570毫秒检索50000条记录
  • 数据集
    =2.100毫秒以检索50000条记录
  • EF4
    =1.200毫秒检索50000条记录
  • MyORM
    =700毫秒检索50000条记录
我使用SQLServer2005(本地)和一个表进行分析

MyORM
由我实现。是一种使用
DataReader
和Fasterflect来填充
IList of T
属性来检索数据的简单方法


要获得这种性能,Linq to SQL的策略是什么?

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代码