Нет, LINQ to SQL нет.На стороне .NET мало что можно распараллелить.Все, что делает LINQ to SQL - это перевод деревьев выражений в запросы SQL.SQL Server будет выполнять эти операторы SQL и может делать это параллельно.
Не забывайте, что хотя вы можете делать что-то подобное с помощью запроса LINQ to SQL LINQ, это не очень хорошая идея:
// BAD CODE!!! Don't parallelize a LINQ to SQL query
var q =
from customer in db.Customers.AsParallel()
where customer.Id == 5
select customer;
Хотя это дает правильные результаты, вы не получите ожидаемого улучшения производительности.PLINQ не может обрабатывать IQueryable
объектов.Следовательно, он будет обрабатывать IQueryable
как IEnumerable
(итерируя его).Он будет обрабатывать коллекцию db.Customers
параллельно и использовать несколько потоков для фильтрации клиентов.Хотя это звучит нормально, это означает, что он будет получать всю коллекцию клиентов из базы данных!Без конструкции AsParallel
LINQ to SQL сможет оптимизировать этот запрос, добавив WHERE id = @ID
в SQL.SQL Server сможет использовать индексы (и, возможно, несколько потоков) для извлечения значений.
Хотя в движке LINQ to SQL есть место для оптимизации, когда дело доходит до сопоставления сущностей с подчиненными сущностями.в настоящее время в фреймворке такой оптимизации, похоже, нет (или, по крайней мере, я не смог найти ничего с помощью Reflector).