是否有可能与以下示例的实体框架并行工作?
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 }
});
}
答案 0 :(得分:8)
不,查询是在数据库上运行的,而不是在客户端中运行的。数据库可以使用多个线程来执行查询以加速该过程,但在任何情况下,您都无法将服务器端处理与客户端并行扩展组合在一起。
答案 1 :(得分:1)
您可以使用PLINQ(并行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 =&gt; p(x))。Orderby(x =&gt; k(x))。选择(x =&gt; F(X));
foreach(q中的变量)a(e);
对于foreach,您也可以看作使用TPL(任务并行库)版本。 http://msdn.microsoft.com/en-us/library/dd460717(v=VS.100).aspx