Будет ли LINQ к объектам блокировать поток? - PullRequest
1 голос
/ 22 октября 2011

Я использую linq для объектов и выясняю, что операция .ToList и .ToArray блокирует поток.(В отчете о производительности я вижу заблокированное время.) Я думаю, это потому, что GC пытается выделить память, когда я вызываю tolist или toarray.Это плохо, потому что я использую linq в параллельном цикле, и я хочу получить доступ к некоторой общей коллекции в linq.Есть ли способ решить эту проблему, кроме использования linq для объекта?

1 Ответ

3 голосов
/ 22 октября 2011

Вызов ToList или ToArray приведет к немедленной оценке запроса - это заблокирует поток, к которому они вызваны, до тех пор, пока не будет оценена вся коллекция и не возвращены результаты запроса.

Выследует выполнить итерацию запроса напрямую, не вызывая ни один из методов - это приведет к потоковой передаче результатов (при условии, что никакая другая оценка не будет выполнена).

Я предлагаю вам взглянуть на Task Parallel Library (TPL), если вам нужно выполнять параллельную работу.

...