星期二, 6月 17, 2008

linq注意撰寫方式

今天在測試一段有趣的linq程式..發現linq的寫法真的要注意點..不然真的會照成效能的影響..大家因該都知道linq他的statement並不會馬上執行..如果不知道可以看我之前的文章Linq 執行時間..接下來我們比較一下下面這兩段的程式碼..

效能差的原始碼..這只是去資料庫抓出兩個table去比較

da.linqToSqlDataContext db = new da.linqToSqlDataContext();

var a1 = from a in db.Products
select a;

var b1 = from b in db.Order_Details
select b;

foreach (var b in b1)
{
var cccc = from c in a1
where c.ProductID == b.ProductID
select c;
foreach (var c in cccc)
{
Response.Write(c.ProductName + "<br />");
}
}

這一段執行效能很差..因為會一直去sql抓取資料..你一看執行的sql就知道露露長..有圖有真相..我只擷取一段..因為很長..XD..

ddfdf

改善後的原始碼

da.linqToSqlDataContext db = new da.linqToSqlDataContext();

var a1 = (from a in db.Products
select a).ToList();

var b1 = (from b in db.Order_Details
select b).ToList();

foreach (var b in b1)
{
var cccc = from c in a1
where c.ProductID == b.ProductID
select c;
foreach (var c in cccc)
{
Response.Write(c.ProductName + "<br />");
}
}

這樣就好多了..有圖有真相..Surprise..裡面就兩段sql..就解決了..剩下的就在記憶體中處理..當然快多啦..

ddfsd
結論是..linq執行時間要搞清處阿..如果不確定..學我笨笨的去看就好啦..XD..
還有..當然可以把他們倆join起來..我只是做個測試..Clown..

沒有留言: