Во-первых, использование списка из 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.