如何使tableadapter.fill查询并行

时间:2019-07-11 07:21:07

标签: sql-server vb.net winforms visual-studio-2010 dataset

对不起,如果我的Google技能错过了一个已经存在的主题。我在互联网上搜索了多个小时,没有找到解决此问题的答案...

我正在尝试加速基于VB.NET的程序,该程序位于私有网络中,并且仅使用一个SQL Server与欧洲和美国的客户进行对话。 美国客户的用户抱怨高延迟,这是完全合理的,因为此刻程序是严格单线程的。

如何使对数据集的查询与SQL Server并行对话?

在单线程中查询每个任务是不合理的,因为如果您必须将5遍以上的查询从欧洲发送到美国再发送回欧洲,那么延迟会进一步降低响应速度。

目前,该程序仅限于VB.NET 4.0,但将来会使用最新的VS2019 pro进行编程。如果您知道仅适用于VS2019的更好解决方案,请继续:)

    Me.DateienTA.Connection.ConnectionString = My.Settings.ProjektConnectionString
    Me.ElementeTA.Connection.ConnectionString = My.Settings.ProjektConnectionString
    Me.AbteilungTA.Connection.ConnectionString = My.Settings.ProjektConnectionString

    Me.DateienTA.Fill(Me.ProjektDS.dateien)
    Me.FirmsTA.Fill(Me.ProjectsDS.Firms)
    Me.AbteilungTA.Fill(Me.ProjektDS.abteilung)
    Me.EmployeesTA.Fill(Me.ProjectsDS.Employees)
    Me.KindOfComponentTA.Fill(Me.ProjectsDS.KindOfComponent)

预期结果是该程序可以一次(并行)发送所有查询,从而将ping时间减少了并行进程的一部分。

2 个答案:

答案 0 :(得分:0)

以下是如何使用Task并发运行它们。只要确保每个任务都有自己的数据库连接即可。

Dim t1 As New Task(New Action(Sub() Me.DateienTA.Fill(Me.ProjektDS.dateien)))
t1.Start()

Dim t2 As New Task(New Action(Sub() Me.FirmsTA.Fill(Me.ProjectsDS.Firms)))
t2.Start()

Dim t3 As New Task(New Action(Sub() Me.AbteilungTA.Fill(Me.ProjektDS.abteilung)))
t3.Start()

Dim t4 As New Task(New Action(Sub() Me.EmployeesTA.Fill(Me.ProjectsDS.Employees)))
t4.Start()

Dim t5 As New Task(New Action(Sub() Me.KindOfComponentTA.Fill(Me.ProjectsDS.KindOfComponent)))
t5.Start()

// Wait for all tasks to finish.
Task.WhenAll(t1, t2, t3, t4, t5)

答案 1 :(得分:0)

尽可能多地收集查询,并将其放入存储过程中。然后,该组查询只有一个往返(延迟)。

这可能也可以帮助用户“靠近”服务器,尽管效果不那么明显。