据我所知,使用 Threading.Tasks.Parallel.Invoke 方法并行执行多个命令时,SQL 连接处理有两种方法。第一种方法是定义一个在所有线程之间共享的公共 SQL 连接。第二种方法是为每个线程打开一个新连接。
这是一个例子:
Threading.Tasks.Parallel.Invoke(
Sub()
Using con As New IfxConnection("ConStr")
con.Open()
Using cmd As New IfxCommand("SELECT * FROM some_table", con)
Using reader = cmd.ExecuteReader()
While reader.Read()
DoSomeStuff()
End While
End Using
End Using
End Using
End Sub,
Sub()
Using con As New IfxConnection("ConStr")
con.Open()
Using cmd As New IfxCommand("SELECT * FROM another_table", con)
Using reader = cmd.ExecuteReader()
While reader.Read()
DoMoreStuff()
End While
End Using
End Using
End Using
End Sub)
另一种方法是使用一个共享连接:
Using con As New IfxConnection("ConStr")
con.Open()
Threading.Tasks.Parallel.Invoke(
Sub()
Using cmd As New IfxCommand("SELECT * FROM some_table", con)
Using reader = cmd.ExecuteReader()
While reader.Read()
DoSomeStuff()
End While
End Using
End Using
End Sub,
Sub()
Using cmd As New IfxCommand("SELECT * FROM another_table", con)
Using reader = cmd.ExecuteReader()
While reader.Read()
DoMoreStuff()
End While
End Using
End Using
End Sub)
End Using
现在,应该首选这两种方式中的哪一种?哪一个会带来更好的性能?
据我观察,当使用共享连接时,就像在我的第二个示例中一样,SQL 命令是按顺序执行的。真的吗?