Вопрос

У меня есть приложение winforms. У меня есть пользовательский элемент управления с большим количеством значков. пользователь может загрузить этот элемент управления в форме много раз (в макете с вкладками). сейчас я загружаю иконки каждый раз, когда создается элемент управления (может быть до 50 раз в приложении). есть ли способ кешировать эти иконки в приложении. если бы я это сделал, это уменьшило бы количество используемых мной дескрипторов gdi, так как это становится проблемой.

Это было полезно?

Решение

Вы можете создать одноэлементный класс для каждой иконки. Первая ссылка это создает дескриптор. Последующие вызовы используют существующий дескриптор.

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

К сожалению, эта идея может быть проблематичной с точки зрения производительности. Требовать от вас рефакторинга кода, который вы все готовы использовать для размещения значков. Наконец, неинституционально, как идеально работает фреймворк со структурой формы управления.

Мы столкнулись с проблемой ресурсов с формами ввода для параметрической формы, которую мы поставляем с нашим программным обеспечением CAM. Слишком много текстовых записей вызывали различные формы странностей и утечек. Таким образом, вместо этого мы создали метки с границами, которые выглядели как текстовые записи и имели ОДНУ текстовую запись (и запись комбинированного окна тоже). Когда пользователь вкладывает, вводит или щелкает отдельную текстовую запись, она перемещается в новую запись, и метка настраивается для предыдущей записи.

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

По моему опыту, у GUI Frameworks есть проблемы, когда вам приходится иметь дело с десятками или сотнями записей, и что вам нужно подходить к проблеме, используя другой дизайн.

Другие советы

Если проблема заключается в количестве " значков " (не уверен, что вы имеете в виду здесь) вы можете использовать Image-Lists. Например, элемент управления Listview может ссылаться на значки в списке изображений вместо сохранения полной копии для каждого элемента (хотя и не уверен, применимо ли это к вашему случаю).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top