我已經比較了兩個從數據庫表中獲取相當大數據的查詢。對於查詢一,我使用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