2012-04-20 48 views
5

这是我现有的代码,一些数据保存到多张表SqlConnection的并行编程

using (SqlConnection conn = new SqlConnection("myConnString")) 
{ 
    DoWork1(conn); 
    DoWork2(conc); 
    DoWork3(conn); 
} 

为了加快我的代码,所以我试图让.NET TPL支持,我rehanged我的代码如下

using (SqlConnection conn = new SqlConnection("myConnString")) 
{ 
    ParallelOptions pw = new ParallelOptions(); 
    pw.MaxDegreeOfParallelism = Environment.ProcessorCount; 

    Parallel.Invoke(pw,()=> DoWork1(conn),()=> DoWork2(conc),()=> DoWork3(conn)); 
} 

但是,这引发了我的数据访问层中ExecuteNonQuery()方法的内部连接致命错误异常。我的并行方法是错误的吗?

+0

“我的平行方法是错误的吗?” - 很可能。 – 2012-04-20 05:48:02

回答

8

那么,有办法可以潜在使用MARS工作 - 但我会建议一种不同的方法。 (我不知道MARS是否支持跨多个线程使用相同的连接,即使它允许多个并发操作。)

而不是尝试在所有并行任务中重用一个连接,使每个任务打开(并关闭)为自己的连接,并让连接池处理效率方面。这是.NET中的一般最佳实践,无论您是否使用并行:打开连接,做一些工作,关闭连接。

+0

谢谢您的快速响应。我会尝试第二种方法(每次操作打开和关闭连接一次) – Renushi 2012-04-20 06:25:56