2013-06-28 2 views
0

Я имею дело со списком. Какое из ниже будет выполняться быстрее? Учитывая количество элементов в результате, как 1000. Метод 1:Какой метод быстрее - выбор foreach или LINQ?

var linqResult = from item in databaseObject 

выбрать пункт;

foreach(customobject item in linqResult) 
{ 
List<customobject>.add(item); 
} 

Метод 2

var data = from item in databaseObject 
select new customobject() 
{ 
//initialize properties 
}); 

data.ToList(); 
+4

Это не имеет значения. – SLaks

+2

Вы пытались запустить код? Что вы нашли в качестве своих результатов? –

+0

Накладные расходы базы данных достаточно велики, и я подозреваю, что это будет очень близко к тому же. Последнее _may_ будет более эффективным, если вы хотите, чтобы определенные поля были извлечены. –

ответ

0
  1. Я бы посоветовал вам выполнить проверку вашего кода, чтобы узнать, что быстрее для вашего конкретного сценария.

  2. Это зависит от того, что именно вы делаете. Я чувствую, что запрос LINQ (правильно протестированный и оптимизированный по производительности) будет быстрее, чем ваш цикл цикла foreach.

  3. LINQ-To-SQL (который вы отметили), из того, что я понимаю, генерирует SQL-команды на основе вашего запроса LINQ и запускает их против источника данных. Это, безусловно, будет быстрее, если цикл foreach в качестве источника данных вернет ТОЛЬКО то, что вы ожидаете, в соответствии с запросом, тогда как для цикла foreach, вероятно, потребуется сначала собрать весь сборник из SQL, а затем перебрать его.

  4. Если вы используете коллекции In-Memory, вам может понадобиться изучить скорость LINQ vs foreach vs Parallel.ForEach. Параллелизм «может» выполняться быстрее, чем эквивалент LINQ, но опять же, вам нужно проверить производительность всех сценариев.

+1

Примечания: он должен также попробовать переключить порядок в тестах (запустите foreach first и linq second, и наоборот). Кроме того, в отношении вашей точки 4 существует также метод ['.AsParallel() LINQ) (http://msdn.microsoft.com/en-us/library/system.linq.parallelenumerable.asparallel.aspx), который может вместо «Parallel.ForEach». Вот отличная статья в PDF, сравнивающая два: http://blog.mssoftwareconsulting.com/msswc/blog/file.axd?file=WhenToUseParallelForEachOrPLINQ.pdf – valverij

+0

@valverij, спасибо за эту заметку, хорошо принят! :-) – series0ne

0

Я думаю, что преимущества выбора Linq, она предоставляет вам отложенное выполнение в то время как простой Еогеасп нет. Если вы используете yield return

Вы можете достичь того, что по умолчанию предоставляет linq. Я не знаю, есть ли разница в производительности, но отложенное выполнение может сэкономить вам много памяти.