【发布时间】:2014-12-05 18:56:21
【问题描述】:
在 c# 中使用 TPL Parallel.ForEach() 方法执行多个线程时遇到问题。多处理访问数据库,我还用 using 语句包装每个操作,以便在每次执行后处理连接。
我得到的错误是:查询处理器无法启动并行查询执行所需的线程资源
经过大量谷歌搜索后,SQL 因太忙或导致一些内存泄漏而耗尽资源。
我也尝试在 Parallel.ForEach() 中设置 ParallelOptions 参数并设置 MaxDegreeOfParallelism = 2 但这没有帮助。即
Parallel.ForEach(customerNumbers, cno =>
{
using (var ctx = new MyContext())
{
// do database call
}
}, new ParallelOptions { MaxDegreeOfParallelism = 2 });
谁能告诉我如何解决这个问题?
【问题讨论】:
-
你为什么不在 Stackoverflow 上问这个非常明显的编程问题?
-
@Maxwell Maake:您的 SQL Server 设置使用多少个工作线程?见msdn.microsoft.com/en-us/library/ms190219%28v=sql.100%29.aspx
-
另外,如果您发布一个 SQL 查询示例,以防您正在做一些可以简化的非常复杂的事情,这可能会有所帮助。您可以在编辑查询时使用 Display Estimated Execution Plan 来查看联接或子查询是否占用了大量资源。
-
最后,如果将代码移出 Parallel.ForEach 块,是否还会发生这种情况?
-
重启服务器 - 对我有用。
标签: c# parallel-processing multithreading