Как эффективно запросить большой список - PullRequest
0 голосов
/ 25 февраля 2019

Каков наилучший подход к поиску в большом настраиваемом списке?Например, у меня есть следующий список ...

Dim BigList As New List(Of Button)
For i As Integer = 0 To 99999
    Dim Btn As New Button With {.Text = "Button Number: " & i}
    BigList.Add(Btn)
Next

Теперь, чтобы найти конкретную кнопку в моем BigList, я бы сделал ...

Dim BtnX As Button
BtnX = BigList.Find(Function(p) p.Text = "Button Number: 25784")

Так как мойсписок кнопок содержит 99 999 кнопок, потенциально больше, как это повлияет на производительность?Что может быть лучше и быстрее для поиска в моем списке, если я точно знаю свойство .Text кнопки еще до того, как выполню поиск?

1 Ответ

0 голосов
/ 25 февраля 2019

Во-первых, использование списка из 99999 кнопок - это плохая идея - у вас есть ограничение элементов управления для всего сеанса приложения.каждый элемент управления - это GDI Object, если вы передадите его, что-то не так с архитектурой вашего приложения, и будет выдано исключение.вместо использования controls используйте класс System.Drawing.Graphics , когда это возможно, для сохранения ресурсов.

из MSDN ( объекты GDI ):

Существует теоретический предел в 65 536 дескрипторов GDI на сеанс.Однако максимальное количество дескрипторов GDI, которое можно открыть за сеанс, обычно меньше, поскольку на него влияет доступная память.

Секунда , для вашего вопроса вы можете использоватьFirstOrDefault() Метод расширения LINQ:

 Dim btn As Button = BigList.FirstOrDefault(Function(p) p.Text = "Button Number: 25784")

также, если вы будете использовать HashSet<T> или Array, у вас будет лучшая производительность по сравнению с List<T>

Другой подход, использует SortedDictionary - SortedDictionary (Of Int16, Button), а затем использует бинарный поиск , чтобы найти вашу кнопку, используя ключ (из int16) в вашем словаре, бинарный поиск выполняется быстрее, чем LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...