Как использовать для цикла вместо цикла foreach? - PullRequest
2 голосов
/ 25 декабря 2011

как я могу реализовать этот цикл foreach с циклом for?потому что я слышал, что цикл for гораздо быстрее, чем цикл foreach.

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

Ответы [ 3 ]

11 голосов
/ 25 декабря 2011

Вы слышали неправильно.
for петли не намного быстрее, чем foreach петли.
На самом деле, для некоторых коллекций foreach петли намного быстрее, чем for петли.

ToList() медленнее, чем любой из них.

Если вы действительно хотите сделать свой код быстрее, вы должны использовать соединение O (n) LINQ вместо O (n 2 *).1013 *) Single() вызов.

0 голосов
/ 26 декабря 2011

Нет смысла конвертировать выбранные вами элементы в список, если вы все равно перечисляете их с помощью foreach. Также цикл for требует, чтобы вы вызывали ToList, который внутренне использует foreach!

Я не знаю, сможет ли ваш o / r-mapper справиться с Contains. Если это так, попробуйте это:

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

Это уменьшит количество запросов к базе данных. Здесь время теряется, а не в foreach!

0 голосов
/ 25 декабря 2011
for (int i = 0; i < gridview.SelectedItems.Count(); i++)
{
    R req = db.Requests.Single(x => x.ID == (gridview.SelectedItems(i) as RV).Id);
    ...
}

Хотя я сомневаюсь, что будет какое-то заметное увеличение производительности.

...