我比较了从数据库表中获取一些相当大的数据的两个查询。对于第一个查询,我使用了Linq To Sql,而对于另一个查询,则是通过ADO.NET使用了直通SQL。
我知道Linq To Sql在幕后要做很多工作,但它实际上在做什么呢?这两个查询获取了相同数量的数据,但Linq To Sql查询比另一个查询慢了5秒以上,并且使用了150mb以上的RAM!
这是我的测试代码:
使用Linq To 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();
}