我已经比较了两个从数据库表中获取相当大数据的查询。对于查询一,我使用Linq To Sql,另一个我通过ADO.NET使用passthrough SQL。为什么Linq将Sql数据绑定到gridview比传递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();
}
当进程没有连接到调试器时,你测试过了吗? – 2009-11-22 17:08:56
我发现与NHibernate类似的问题。 我不确定在屏幕后面有什么大的seceret,但我猜测ORM工具很慢...... – Dani 2009-11-22 17:13:39
@Dani - “数据绑定性能试验并不遵循”ORM工具很慢“。这是一个非常**一般(和恕我直言,误导)声明。 – TrueWill 2009-11-22 17:44:57