У меня есть программа, которая позволяет пользователю искать клиента по имени. До сих пор я делал это (код ниже): пользователь начинает вводить имя клиента в TextBox (tbCust), код запускает событие TextChanged и заполняет ListBox в зависимости от того, что набрал пользователь. Я думаю, что идея здесь очевидна и широко используется.
Это работает без минимальной задержки на моем компьютере, но на компьютерах некоторых других пользователей, которые являются машинами базового уровня, между обновлениями существует задержка от 100 мс до 300 мс, что делаетдля довольно дрянного пользовательского опыта.
Поправьте меня, если я ошибаюсь, но я чувствую, что эта функциональность должна быть легко достижимой без какой-либо ощутимой задержки практически для любого компьютера.
Я предполагаю, что есть более правильный / эффективный способ сделать это, что я просто недостаточно умен, чтобы придумывать самостоятельно (войдите, все вы!)
Пожалуйста, отбросьтенекоторый свет на, возможно, более «подходящий» способ сделать это, что приведет к гораздо лучшей производительности. Я предполагаю, что моя проблема заключается в запросах к базе данных при каждом запуске подпрограммы (каждый раз, когда пользователь вводит букву), но я не уверен, как еще это сделать, продолжая работать с живыми данными.
Заранее большое спасибо!
Видео приемлемого исполнения на моем компьютере: Youtube Video # 1
Видео неприемлемого исполнения на компьютере пользователя: YouTube Video # 2
Характеристики компьютера пользователя:
Private Sub tbCust_TextChanged(sender As Object, e As EventArgs) Handles tbCust.TextChanged
'This populates the Customer Selection list box with customers whose names start with the
'string of letters in the customer name text box.
If tbCust.TextLength > 0 Then
lbCustSelect.Visible = True
Dim SQL As String
SQL = "SELECT C_CUSTOMER as ID, C_SHIPNAME as Name FROM CUSTOMER WHERE LEFT(C_SHIPNAME," & tbCust.TextLength & ") ='" & tbCust.Text & "'"
'Query Database
AeroDBcon.RunQuery(SQL)
'Fill DataTable with Query results
dtCustomers = AeroDBcon.DBds.Tables(0)
'Tie DataTable to ListBox
lbCustSelect.DataSource = dtCustomers
lbCustSelect.DisplayMember = "Name"
lbCustSelect.ValueMember = "ID"
'If there are no results, hide the ListBox
If dtCustomers.Rows.Count = 0 Then
lbCustSelect.Visible = False
End If
Else
'if there is no text in the customer name text box, hide the listbox
lbCustSelect.Visible = False
End If
End Sub