В итоге я принял некоторые ваши предложения и пришел к выводу, что ComboBox, вероятно, не был подходящим элементом управления для хранения более 5 КБ ListItems. Вместо этого я переключил 40 ComboBox на 40 TextBox. Я установил AutoCompleteMode на «Suggest», а AutoCompleteSource на «Custom Source» для всех 40 из них. С настроенным предложением, он действительно работает как ComboBox, очень быстро и делает то, что мне нужно.
Public colFISFibers As AutoCompleteStringCollection
Private Sub RefreshBOXNFISFiberControls()
Dim lFibersMaster As List(Of String) = GetFISFiberIDs()
colFISFibers = New AutoCompleteStringCollection()
colFISFibers.AddRange(lFibersMaster.ToArray())
For i As Integer = 1 To 40
Dim strControlName As String = "txtBOXN_Slot_" & i.ToString().PadLeft(2, "0")
Dim objTextBox As TextBox = DirectCast(tpBOXN.Controls(strControlName), TextBox)
With objTextBox
.AutoCompleteCustomSource = colFISFibers
.Text = String.Empty
End With
Next
End Sub
Private Function GetFISFiberIDs() As List(Of String)
Dim ret As New List(Of String)()
Dim strConnectionString = ConfigurationManager.ConnectionStrings("FIS").ConnectionString
Using conFIS As New OracleConnection(strConnectionString)
conFIS.Open()
Dim strSQL = "SELECT DISTINCT SERIAL_FIBER_ID FROM FIS.FIB_DATA_HEADER ORDER BY SERIAL_FIBER_ID"
Using cmdFIS As New OracleCommand(strSQL, conFIS)
Using drFIS As OracleDataReader = cmdFIS.ExecuteReader()
While drFIS.Read()
ret.Add(drFIS("SERIAL_FIBER_ID").ToString())
End While
End Using
End Using
conFIS.Close()
End Using
Return ret
End Function