![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В последнюю неделю-две SQL Server Management Studio 2005 вдруг начала часто и непонятно падать. Проследил проблему до счётчика "GDI Objects" в Task Manager: для процесса SqlWb.exe количество открытых объектов колебалось в районе 9900, а когда подходило к 10000, тогда процесс и падал. Количество это совершенно ненормальное.
Подумав, отключил Windows XP Themes. Счётчик GDI Objects тут же упал до 200-300, всё заработало.
Другие приложения (включая куда более толстые и сложные окна Visual Studio .NET) от этой проблемы не страдают. У коллег всё нормально. Где же и что же я у себя поломал?
Подумав, отключил Windows XP Themes. Счётчик GDI Objects тут же упал до 200-300, всё заработало.
Другие приложения (включая куда более толстые и сложные окна Visual Studio .NET) от этой проблемы не страдают. У коллег всё нормально. Где же и что же я у себя поломал?
no subject
Date: Friday, 22 August 2008 09:05 (UTC)зависит от конкретной темы. некоторые приложения любят запускать что-то (возможно, треды) в отдельных скрытых окнах, а на эти окна, скомпилённые микрофтовсим си-компилером, расходуются ресурсы как на натуральные, причём закрытие окон ресурсы не высвобождает (если службы "темы" выключена, то освобождает нормально).
no subject
Date: Friday, 22 August 2008 09:50 (UTC)no subject
Date: Friday, 22 August 2008 10:43 (UTC)у микрософта это частое явление. постоянно их программы "текут". причём это в компилятор "встроено", так что переписывая сам код, от этого не избавишься :( а с профилерами они тем более не возятся
no subject
Date: Friday, 22 August 2008 10:46 (UTC)Посмотрел, что же это за GDI Objects. Много-много объектов Region. Битмапов, шрифтов и прочего совсем мало.
no subject
Date: Friday, 22 August 2008 10:50 (UTC)но странно. это ресурс обычно для интерактивного окна. за каким он может так размножаться на нормальной системе? непонятно, в общем.
no subject
Date: Friday, 22 August 2008 11:08 (UTC)no subject
Date: Friday, 22 August 2008 09:32 (UTC)А вообще, во времена, когда я на голом WinAPI что-то писал, я так толком и не понял, кто и когда эти ресурсы высвобождает. Запросил себе, например, шрифт - и пользуйся им по дескриптору, но вызова "освободить ненужный более шрифт" не предлагалось.
no subject
Date: Friday, 22 August 2008 09:49 (UTC)Там по-разному для разных ресурсов. Некоторые высвобождать и не надо, но для большинства нужно вызывать DestroyHandle(), когда объект больше не нужен.
no subject
Date: Friday, 22 August 2008 10:19 (UTC)(Глянул в сорцы) У меня там был только один Bitmap, который перевыделялся каждый раз при ресайзе окна, и я ему тогда делал DeleteObject(). Больше вроде ничего не удалял. Менюшки контекстные создавал при каждом случае, но никогда не удалял - однако же, ресурсы не утекали вроде никуда.