1

据我所知,使用 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 命令是按顺序执行的。真的吗?

4

0 回答 0