Я относительно новичок в программировании окон. Я разрабатываю приложение формы Windows, которое требует, чтобы пользователь просматривал форму (я использовал FlowLayoutPanel с AutoScroll = True внутри формы). Источник панели содержит пользовательский элемент управления, который зацикливается в зависимости от количества записей.Winforms: прокручиваемая FlowLayoutPanel с тысячами пользовательских элементов управления. Как предотвратить утечку памяти и правильное размещение объектов?
Например, если в БД имеется 10 записей, тогда 10 элементов управления создаются и добавляются в Панель при загрузке Формы, и пользователь сможет прокручивать 10 элементов. (См. Образец изображения, который изображаю этот сценарий) Sample Screen Image
Издание:
проблемы возникает, когда есть большее количество записей (скажем, 1000), так как объекты UserControl не настроенные и предел Handle превышен, сбой приложения (с сообщение: Ошибка при создании дескриптора окна). Я знаю, что это утечка памяти или проблема с плохим дизайном.
Но я не могу найти надежное решение здесь, я подумал о приведенных ниже вариантов (для преодоления проблемы), но не уверен, как действовать на них:
- нагрузки только элементы управления UserControl видны на (как пользователь прокручивает или когда нажата кнопка «вверх/вниз»)
- Можно ли визуализировать пользовательские элементы управления как изображение на панели, а также при наведении или нажатии любой части пользователя управление может быть повторно инициализировано и запущено для загрузки (таким образом, фактический пользовательский объект управления не будет находиться в памяти)
Не могли бы вы предложить подходящее решение/правильный способ обработки объектов UserControl в контексте этого требования
Рассматривали вы с помощью той или иной форме пейджинга? Например, ваш LayoutPanel всегда будет отображать 10 UserControls (без полосы прокрутки), а затем добавлять номера страниц для навигации по вашим записям по 10 за раз? Это обычный метод, когда вы хотите избежать загрузки большого количества данных и загромождать пользовательский интерфейс? – LightBulb
То, что UserControl не очень хорошо масштабируется, должно быть изучено в школе Hard Knocks. Операционная система ограничивает количество элементов управления, которые вы можете создать, что UserControl плюс все его дочерние элементы управления не может превышать 10 000. Используйте тот элемент управления, который может отображать несколько строк информации, например ListView и DataGridView. И посмотрите на Google для правильного способа представления десятков тысяч результатов. –
@LightBulb: Да, я рассмотрел Paging, это решит проблему, но это не очень удовлетворительно для пользователей (поскольку они не хотят перемещаться с использованием подкачки, а скорее прокручивают), и поэтому я пытаюсь понять если что-нибудь еще можно сделать –