Параллельная EntityFramework - PullRequest
       6

Параллельная EntityFramework

3 голосов
/ 28 апреля 2010

Можно ли заставить какую-то работу параллельно со структурой сущности для следующего примера?

using (var dbContext = new DB())
{
var res = (from c in dbContext.Customers
           orderby c.Name
           select new
                    {
                    c.Id, 
                    c.Name,
                    c.Role
                    }
          ).ToDictionary(c => c.Id,
                         c => new Dictionary<string, object> {
                                                               { "Name",c.Name },
                                                               { "Role", c.Role }
                                                             });
}

Например, что изменится, если я добавлю AsParrallel?

using (var dbContext = new DB())
{
var res = (from c in dbContext.Customers
           orderby c.Name
           select new
                    {
                    c.Id, 
                    c.Name,
                    c.Role
                    }
          ).AsParallel().ToDictionary(c => c.Id,
                         c => new Dictionary<string, object> {
                                                               { "Name",c.Name },
                                                               { "Role", c.Role }
                                                             });
}

И еще один пример. Вопрос тот же, в чем различия в 3 примерах.

using (var dbContext = new DB()) 
{ 
var res = (from c in dbContext.Customers.AsParallel() 
           orderby c.Name 
           select new 
                    { 
                    c.Id,  
                    c.Name, 
                    c.Role 
                   } 
          ).AsParallel().ToDictionary(c => c.Id, 
                         c => new Dictionary<string, object> { 
                                                               { "Name",c.Name }, 
                                                               { "Role", c.Role } 
                                                             }); 
} 

Ответы [ 2 ]

9 голосов
/ 28 апреля 2010

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

2 голосов
/ 28 апреля 2010

Вы можете с PLINQ (Parallel LINQ)

http://msdn.microsoft.com/en-us/library/dd460688.aspx

http://msdn.microsoft.com/en-us/magazine/cc163329.aspx

Например (сверху):

IEnumerable data = ...; var q = data.AsParallel (). Где (x => p (x)). Порядок (x => k (x)). Выберите (x => F (X));

foreach (var e in q) a (e);

Для foreach вы также можете использовать версию TPL (Task Parallel Library). http://msdn.microsoft.com/en-us/library/dd460717(v=VS.100).aspx

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