首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Linq To SQL数据绑定到gridview要比直通Sql慢得多?

为什么Linq To SQL数据绑定到gridview要比直通Sql慢得多?
EN

Stack Overflow用户
提问于 2009-11-23 00:44:51
回答 5查看 1.5K关注 0票数 7

我比较了两个查询,这两个查询从数据库表中获取一些相当大的数据。对于一个查询,我使用Linq To Sql,对于另一个查询,我通过ADO.NET使用passthrough SQL。

我知道Linq To Sql需要在幕后做很多工作,但它实际在做什么呢?这两个查询获取的数据量相同,但Linq To Sql查询慢了5秒以上,并且多使用了150mb的RAM!

下面是我的测试代码:

使用Linq To Sql:

代码语言:javascript
复制
public void MakeList()
    {
        int start = Environment.TickCount;
        var document = from d in _dm.tDokuments select d;

        List<tDokument> documentList = document.ToList();
        int end = Environment.TickCount;

        GridView1.DataSource = documentList;
        GridView1.DataBind();

        Label1.Text = (end - start).ToString();
    }

透传SQL + ADO.NET:

代码语言:javascript
复制
public void MakeList()
    {

        int start = Environment.TickCount;
        SqlCommand sqlCommand = new SqlCommand("SELECT * FROM tDokument", _connection);
        SqlDataAdapter da = new SqlDataAdapter(sqlCommand);

        DataSet ds = new DataSet();
        da.Fill(ds);
        int end = Environment.TickCount;

        GridView1.DataSource = ds;
        GridView1.DataBind();

        Label1.Text = (end - start).ToString();
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-23 01:06:06

Linq2Sql返回强类型的对象,当数据集被填充时,本质上相当于一个哈希表。

在Linq中,数据的填充和数据到GridView的绑定使用了大量的反射来生成所需的结果。

在第二段代码中,数据被加载到dataset并绑定到GridView。这本质上是加载一个包含要绑定的数据和查找的哈希表。

哈希表操作总是比反射快。对于少量的数据,不会有明显的差异,但对于大量的数据,您将看到Linq中反射的影响。

票数 8
EN

Stack Overflow用户

发布于 2009-11-23 00:54:57

您是否查看过使用Profiler发送到SQL Server的实际SQL?

在这种情况下,我怀疑是客户端处理它的方式(DataSet和List)造成了差异,但我一点也不是c#专家。

票数 4
EN

Stack Overflow用户

发布于 2009-11-23 01:12:33

捕获并分析Linq To SQL示例中通过网络发送的Sql语句。SQL事件探查器将完成此任务。

使用Management Studio直接针对SQL Server运行示例1和示例2中的这两条语句。很可能您在查询计划中看不到任何实质性的区别。

我认为大部分时间都花在构造C#对象(我认为是Jason's answer nails it)上。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1779220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档