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

Posted

技术标签:

【中文标题】Linq-to-SQL 数据检索速度比较【英文标题】:Linq-to-SQL data-retrieval speed comparison 【发布时间】: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 的策略是什么?

【问题讨论】:

【参考方案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 代码。

【讨论】:

以上是关于Linq-to-SQL 数据检索速度比较的主要内容,如果未能解决你的问题,请参考以下文章

DataGridView 重绘速度慢

数据库插入速度比较

stringbuilder和stringbuffer速度比较

stringbuilder和stringbuffer速度比较

92先比较,再更新,速度极快

python 列表生成式和生成器的速度性能比较