[Delphi]Прога отъедает дескрипторы.. :(

Гоша 01.07.2004 - 15:02 | Такая вот хрень: есть прога, которая крутится на серваке, обрабатывает почту, работает с базой. Прога постоянно отъедает у операционки дескрипторы, т.е. в диспетчере задач есть параметр "дескрипторы" и он постоянно растет при работе проги, если программу закрыть, то этот параметр сильно уменьшается, если не трогать программу несколько суток, то значение этого параметра очень сильно вырастает и раз даже дошло до того что операционка ругалась про нехватку ресурсов, хотя памяти свободной было около сотни метров.. Короче, ясно что где-то я там чего-то не освобождаю. Вроде весь код перепроверил, нигде ничего не нашел.. Как быть? И что винда имеет в виду под "дескрипторами"?
archimag 1 - 01.07.2004 - 16:04 | дескриптор - "описатель" какого-нибудь ресурса, например, файла или раздела реестра. Просто твоя программа поглощает ресурсы, а отдавать не хочет. В 98-х такое очень часто случалось при работе с GDI и системе начинало нехватать ресурсов уже через несколько минут работы. Но, например, в XP с этим лучше, старался его до этого довести, но безрезультатно (при работе с графикой). Хотя, если прога будет заниматься этим несколько суток - то всё возможно :-) Так что проверь освобождение всех возможных ресурсов - файлов, разделов реестра, объектов GDI, таймеров, событий и т.д. ... Любопытно, как можно было написать программу, которая обрабатывает почту, работает с базой и т.д., и не выяснить что такое дескриптор? ;-)
emptyform 2 - 01.07.2004 - 17:26 | нахрена дельфисту знать что такое дескриптор? ;))))) шучу. что такое дескриптор знаю, я не был уверен что диспечер имеет в виду именно это. вроде все файлы закрываю и отпускю, реестр отпускаю, в GDI не лезу.. не понятно, короче..
archimag 3 - 01.07.2004 - 17:48 | В справке диспечера сказано буквально следующее: дескриптор: значение для определения ресурса, например файла или раздела реестра, позволяющее приложениям обращаться к ресурсу.
hkm 4 - 01.07.2004 - 22:30 | Попробуй системный монитор нормальный запустить. Например, Таскинфо - он показывает типы дескрипторов и всякую инфу о них. Или попробуй что-то вроде AQTime - он вроде может даже место в исходниках показать, где ресурс был выделен.
VaS 5 - 02.07.2004 - 19:44 | Кроме AQTime для поиска утечек ресурсов еще можно использовать TurboPower CodeWatch. А по поводу принципильной возможности создания программы без таких ликов (в том числе с GDI(+)) на Делфи - да, возможно.
Call Terner 6 - 02.07.2004 - 22:48 | Вообще дескрипторы это все что указывает на обьект, например HWND - это дескриптор окна, HFILE - дескриптор файла, диспечер задач считает все дескрипторы системы не только это но и такие как HBRUSH или HPEN, в справке сказанно что все открытые дескрипторы надо удалять за собой BOOL CloseHandle( HANDLE hObject ); удалет дискрипторы следующих обьектов Access token Communications device Console input Console screen buffer Event File File mapping Job Mailslot Mutex Named pipe Process Semaphore Socket Thread Если Windows ругаеться на нехватку памяти, то в каком то месте ты просто забываешь их удалить.
yeziz 7 - 02.07.2004 - 23:30 | Есть такая умная прога: Compuware Devpartner Studio. Не видел ничего лучше для ловли "блох": утечка памяти, ресурсов ("дескрипторов") и прочего. Попоробуй, должно помочь. На дебаг-версии он прямо мордой в строчку кода тыкает: тут у тебя фигня, тут аллокировали память и не освободили и проч.

>>