2011-12-25 13 views
2

forループでこのforeachループを実装するにはどうすればよいですか?なぜなら、forループはforeachループよりはるかに高速だと聞いたからです。foreachループの代わりにforループを使用する方法は?

foreach (RV item in gridview.SelectedItems.ToList()) 
    { 
     R req= db.Requests.Single(x => x.Id == item.Id); 
     ... 
    } 
+0

これは簡単な 'for'ループです。あなたの質問は表示されません。 – SLaks

答えて

11

あなたは間違って聞いたことがあります。
forループは、foreachループよりはるかに高速ではありません。
実際、一部のコレクションでは、foreachループはforループよりもはるかに高速です。

ToList()の方がどちらか遅いです。

実際にコードを高速化したい場合は、O(n)LINQ結合をO(n )Single()呼び出しの代わりに使用する必要があります。

+0

'foreach loop'はいつより速く、' for loop'はいつですか? – gdoron

+0

@gdoron:リンクリストを 'IList 'として使うとき。 – SLaks

+0

理由を説明したり、リンクを提供したりできますか? – gdoron

0
for (int i = 0; i < gridview.SelectedItems.Count(); i++) 
{ 
    R req = db.Requests.Single(x => x.ID == (gridview.SelectedItems(i) as RV).Id); 
    ... 
} 

パフォーマンスの向上は目に見えますが、

+3

'Count()'から(計り知れない)パフォーマンスの低下があります。 – SLaks

+0

本当にあります:( – Martin

0

foreachを使用して列挙している場合は、選択した項目をリストに変換することはありません。また、forループでは、内部的にforeachを使用するToListを呼び出す必要があります。

o/r-mapperがContainsに対応できるかどうかわかりません。試してみると:

var items = db.Requests.Where(x => gridview.SelectedItems.Contains(x.Id)); 

これにより、データベース要求の数が減ります。これは、foreachではなく、時間が失われる場所です!

関連する問題