Прогнозирование сгруппированных результатов linq невероятно медленно, какие-либо советы? - PullRequest
0 голосов
/ 18 сентября 2010

Я выполнил некоторое профилирование для программы, которую я запускаю, и самое длительное время - получение результатов из запроса linq:

var Results = 
    from a in Table
    group a by a.Value into b
    select new {Group = b};

foreach(var Result in Results)
{
    //Do calcs
}

Есть идеи, как мне это ускорить?

Ответы [ 3 ]

2 голосов
/ 18 сентября 2010

Я думаю, вы путаете объект запроса с результатами этого запроса.Ваша первая переменная не содержит результатов, она содержит объект запроса.На данный момент запрос не был выполнен.Выполнение откладывается до тех пор, пока вам действительно не понадобятся результаты, и в вашем примере это делается, когда вы выполняете итерацию в цикле foreach.Вот почему первый оператор выполняется быстро, но итерация медленная.

Если вы хотите сохранить результаты запроса в results, чтобы они уже вычислялись к моменту запуска цикла foreach, затем добавьтевызов ToList ().

var results = 
    (from a in Table
     group a by a.Value into b
     select new {Group = b}).ToList();
0 голосов
/ 03 января 2012

У меня была такая же проблема только с 2000 записями Sqlite (индексированными), используемыми для MSChart, по-видимому, это вызвано оператором группы LINQ, запрашивающим все записи.

Единственное решение, которое я нашел, - вернуться к собственному SQL, и диаграмма отображалась мгновенно, а не через 2 секунды с использованием LINQ с SQlite.

0 голосов
/ 18 сентября 2010

Если вы используете .NET 4, взгляните на петли P-LINQ или Parallel ForEach .Это должно значительно увеличить производительность.

Не могу сказать, основываясь на предоставленной информации, но это может быть SQL-запрос, который занимает слишком много времени?

Если цикл ForEach действительно вызывает узкое место, то лучшим вариантом будет Parallel ForEach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...