问题描述
在我们部署到多个客户端的生产软件中,我们使用 System.Data.Common 模块来处理应用程序和异地数据库之间的通信。数据库很大而且并不总是很快,这导致应用程序在复杂的 SELECT 语句期间冻结。
我如何重构这样的代码以在后台工作,以便主程序线程在等待数据库检索数据时不会冻结?
Class UserDashboard
Private Sub LoadButton_Click(sender As Object,e As RoutedEventArgs) Handles LoadButton.Click
LoadRecords()
End Sub
Public Sub LoadRecords()
AllUsers.Clear()
UserView.ItemsSource = AllUsers
Using UsersDS As New DataSet
Using UsersDA As New sqlDataAdapter With {'REDACTED sqlDA arguments'}
UsersDA.Fill(UsersDS,"Users")
Using UsersDV As New DataView(UsersDS.Tables("Users"))
For Each UserDRV As DaTarowView In UsersDV
AllUsers.Add(ParseUserDRV(UserDRV))
Next
End Using
End Using
End Using
End Sub
Private Function ParseUserDRV(ByVal UserDRV As DaTarowView) As User
Dim ThisUser As New User
ThisUser.ID = UserDRV.Item("ID")
' REDACTED code for setting ThisUser properties
'Get Subordinates
Using DS1 As New DataSet
Using DA1 As New sqlDataAdapter With {'REDACTED sqlDA arguments'}
DA1.Fill(DS1,"Users")
Using DV1 As New DataView(DS1.Tables("Users"))
For Each SODRV As DaTarowView In DV1
ThisUser.Subordinates.Add(ParseDRV(SODRV))
Next
End Using
End Using
End Using
Return ThisUser
End Function
' REDACTED other functionality for the form '
End Class
我在此处编辑了一些代码以简化/匿名化内容,但如果您需要更多上下文,请告诉我。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)