有没有可能在下面的例子中与实体框架并行工作?
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 }
});
}再举一个例子。问题是一样的,三个例子有什么不同?
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 }
});
} 发布于 2010-04-28 19:18:36
否,查询是在数据库上运行的,而不是在客户端上运行。数据库可以使用多个线程来执行查询,以加速该过程,但在任何情况下,您都不能将服务器端处理与客户端并行扩展结合起来。
发布于 2010-04-28 19:50:05
您可以使用PLINQ (并行LINQ)
http://msdn.microsoft.com/en-us/library/dd460688.aspx
http://msdn.microsoft.com/en-us/magazine/cc163329.aspx
例如(来自上面):
IEnumerable IEnumerable= ...;var q= data.AsParallel().Where(x => p(x)).Orderby(x => k(x)).Select(x => f(x));
foreach (q中的var e) a(e);
对于foreach,您也可以使用TPL (任务并行库)版本。http://msdn.microsoft.com/en-us/library/dd460717(v=VS.100).aspx
https://stackoverflow.com/questions/2728882
复制相似问题