【问题标题】:Linq-to-SQL data-retrieval speed comparisonLinq-to-SQL 数据检索速度比较
【发布时间】:2012-02-08 19:31:26
【问题描述】:

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

我对@9​​87654322@、EF4DataSetMyORM 进行了性能测试。

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 的策略是什么?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 2013-02-14
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      相关资源
      最近更新 更多