Чрезмерное использование памяти comctl32.dll, когда Visible элемента управления флажок становится истинным

Я добавляю элементы управления в форму Windows во время выполнения в приложении C# .NET. Каждый из этих элементов управления взаимодействует с конкретным сигналом и использует некоторые данные из этого сигнала - имя сигнала, описание, источник, единицы измерения, значение и т. Д.

Эти элементы управления имеют флажок на них. Когда свойство Visible флажка только для одного из этих сигналов становится истинным, объем зарезервированной памяти моего приложения превышает 800 МБ. Ни один из других сотен сигналов не имеет проблемы.

Я использовал инструмент DebugDiag, чтобы узнать, что comctl32.dll выделяет 805,45 МБайт. Особенно:

  • Функция comctl32_72380000!CCHeapAllocArraySize+3a
  • Тип размещения Куча (ы)
  • Ручка кучи 0xf37893cd
  • Распределение Количество 1 распределение (я)
  • Размер размещения 803,20 МБайт
  • Вероятность утечки 16%

Какими должны быть мои следующие шаги по устранению неполадок? Какие инструменты могут помочь?

Обновление: я отследил проблему до System.Windows.Forms.TrackBar на родительском элементе управления. Трек-бар имел максимум более 200 000 000. Когда я уменьшил максимум до 100 000 000, он использовал примерно половину памяти. Установка максимального значения около 1 000 000 использовала более разумный объем памяти.

1 ответ

Решение

Я отследил проблему до System.Windows.Forms.TrackBar на родительском элементе управления. Трек-бар имел максимум более 200 000 000. Когда я уменьшил максимум до 100 000 000, он использовал примерно половину памяти. Установка максимального значения около 1 000 000 использовала более разумный объем памяти.

Флажок.Visible меня скинул. Похоже, что приложения создавали элемент управления и память для него в точке checkbox.Visible стал истинным, но сам флажок не имел никакого отношения к проблеме.

Другие вопросы по тегам