Прежде всего, вы уверены, что проблема не в куче рабочего стола, а в подсчете количества дескрипторов? Каждый дескриптор может занимать определенное количество кучи рабочего стола Windows. Одна ручка USER может съесть много места, а совсем немного. Я предлагаю это, чтобы убедиться, что вы не гоняетесь за подсчетом пользовательских дескрипторов, когда это действительно что-то другое. (Google для инструмента dheapmon от Microsoft, это может помочь)
Я читал, что вы можете изменять максимальные значения дескрипторов, изменяя ключи в реестре:
HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \
Текущая версия \ Windows \ USERProcessHandleQuota и GDIProcessHandleQuota
Это может быть краткосрочным исправлением для пользователей.
Я бы подошел к этому, сначала выяснив, какие 2 пользовательских маркера нужно поддерживать для каждого элемента (например, 2 для каждого элемента в списке?). Это кажется подозрительным. Дескрипторы пользователя предназначены только для нескольких объектов пользовательского интерфейса Windows верхнего уровня (Windows, меню, курсоры, положения окон, значки и т. Д.). Я не понимаю, почему ваш виджет должен хранить по 2 объекта для каждого элемента (это дескриптор значка?).
Если вы хотите разорвать все это на части - это похоже на работу для виртуального режима просмотра списка (LVS_OWNERDATA).