как сделать запросы tableadapter.fill параллельными - PullRequest
0 голосов
/ 11 июля 2019

Извините, если мои гугл-навыки пропустили уже существующую тему.Я искал в интернете несколько часов и не нашел ответа на эту проблему ...

Я пытаюсь ускорить программу на основе VB.NET, которая находится в частной сети и общается с клиентами в Европе.и США только с одним SQL Server.Пользователи клиентов в США жалуются на высокую задержку, что вполне оправдано, поскольку в настоящий момент программа является строго однопоточной.

Как я могу заставить запросы к набору данных взаимодействовать с SQL Server параллельно?

Нет смысла запрашивать каждую задачу в одном потоке, поскольку задержка убивает отзывчивость еще больше, если вам нужно отправить 5x + запросов из Европы в США обратно в Европу.

В данный момент эта программаограничен 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)

ожидаемые результаты будут в том, что программа может отправлять все запросы одновременно (параллельно) и, следовательно, сократить время пингафактором параллельных процессов.

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Соберите как можно больше своих запросов и поместите их в хранимую процедуру.Тогда у вас будет только один прием (задержка) для этого набора запросов.

Это также может помочь пользователям "приблизиться" к серверу, хотя и не так резко.

0 голосов
/ 11 июля 2019

Вот как использовать 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.WaitAll(t1, t2, t3, t4, t5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...