while true do begin
E := CreateWindow('edit', '',
WS_CHILD or WS_CLIPSIBLINGS or WS_VISIBLE or ES_AUTOHSCROLL or ES_READONLY, 0, 0, 0, 0, H, 0, 0, nil);
DestroyWindow(E);
end;
> Сделай отображение столбца "USER Objects" в менеджере задач
Это где? Это из винды-семёрки?
Ну там есть монитор ресурсов, на вкладке "память" столбики "Завершено" (13 МБ), "Рабочий набор" (16МБ), "Общий" (4МБ), "Частный" (12МБ)
Куда смотреть?
А, понял.
Память жрётся, кол-во объектов - не меняется, стабильно.
Что за чудеса?
Проверял все типы объектов, я надеюсь? И хэндлы, и USER-objects, и GDI-objects (может, чего-нибудь не закрывается)?
Запустил простейшую WinAPI программку, которая по нажатию кнопки запускает вот тот самый вечный цикл создания/разрушения окна - так память даже не шелохнулась, прождал около 10 минут - ни одна цифра не поменялась, ни в стандартном Task Manager-е, ни в ProcessExplorer-е от Марка Руссиновича...
Да, количество дескрипторов тоже не меняется, а память куда-то течёт, причём только в начале, потом упирается в некий потолок и остаётся на нём.
В общем, я обнаружил, что память течёт только при запуске из среды и только под вин7. При запуске из проводника глюка нет.
Будем думать дальше.