sql - 为什么 Linq To Sql 数据绑定(bind)到 gridview 比传递 SQL 慢得多?

标签 sql linq-to-sql data-binding

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

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

这是我的测试代码:

使用 Linq 到 Sql :

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:
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();
    }

最佳答案

Linq2Sql 正在返回强类型对象,其中数据集填充了本质上相当于哈希表的内容。

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

在第二段代码中,数据被加载到数据集中并绑定(bind)到 GridView。这本质上是加载一个带有数据和查找绑定(bind)的哈希表。

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

关于sql - 为什么 Linq To Sql 数据绑定(bind)到 gridview 比传递 SQL 慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1779220/

相关文章:

sql - 如何在 SQL 中返回每个组的增量组号

sql - 使用从第二行到最后一行的数据更新最后一行

SQL:计算两个不同条目具有的值的数量

python - 你能用 Python 或 Boo 之类的语言进行类似 LINQ 的查询吗?

c# - 将 NULL 值传递给 LINQ 中的日期时间字段

SQL - 按索引列检索行 - 性能

xamarin.forms - Xamarin 选择器未绑定(bind)

javascript - 在 knockout.js 中强制应用绑定(bind)

c# - 异步填充强类型数据集

c# - 具有多种 RDBMS 类型的 Linq