![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что в программе может жрать ресурсы? [D6, Win2k]
Aleksandr © (2002-03-20 12:18:00)Уважаемые коллеги!
Добавил я в программу истчо один поток, пользующийся TIdTCPClientом для отсылки обнаруживаемых файлов... И началась полная ерунда - ресурсы процессора программа поедает на 99% в течение часа, а из памяти сервера за ночь она съедает 30 метров... Я просто ошизеваю! Поток создается только один раз за всю историю программы. Уничтожается он при ее завершении... Отчего может происходить утечка?
Виктор Щербаков (2002-03-20 14:36:00) [1]Не до начала, а именно в цикле.
Aleksandr (2002-03-20 14:34:00) [2]2 Nikolay M.
Что-то похожее я где-то встречал... Ставить этот Sleep до начала цикла в Execute?
begin
Sleep(1);
Repeat
DoSome
until Terminated
end; ?
Nikolay M. (2002-03-20 14:17:00) [3]Такая загрузка ЦП бывает под НТ, потому что там по иному устроена многопоточность, в отличие от 95/98. Лечится установкой в TThread.Execute задержки Sleep (1).
Про утечку - присоединяюсь - надо смотреть, где выделяется память и во всех ли случаях она правильно освобождается.
Виктор Щербаков (2002-03-20 13:25:00) [4]
> Объекты синхронизации ОС - это что?
Это мьютексы, семафоры, таймеры и т.п.
Про синхронизацию с помощью объектов ядра можно у Рихтера почитать. Достаточно полно описано.
Aleksandr (2002-03-20 13:19:00) [5]Так-так-так... У меня есть Sleep для потока... Объекты синхронизации ОС - это что? Просто в потоке и в самом деле тучу раз производится ожидание, malli, когда сокет ждет ответа от удаленной программы.
Виктор Щербаков (2002-03-20 13:04:00) [6]Если поток непрерывно работает (т.е. не находится в режиме ожидания) и не освобождает кванты выделенного процессорного времени (Sleep, SleepEx). То 100-процентная загрузка ЦПУ - это нормально.
Digitman (2002-03-20 13:01:00) [7]>>"Отчего может происходить утечка?"
Поток запрашивает выделение памяти из кучи, но не освобождает ее по завершению
>>"ресурсы процессора .."
1. Уменьшай отн.приоритет потока
2. В циклах ожидания неких событий (если таковые есть в теле потока) используй везде, где возможно, объекты синхронизации ОС
Aleksandr (2002-03-20 13:00:00) [8]Загрузка ЦП :(
Alx2 (2002-03-20 12:59:00) [9]Так нового ничего не скажу.
Память - от ее неосвобождения.
Про ресурсы процессора - не понял. Что это? Загрузка ЦП?
Если ресурсы GDI или user - то опять-таки, что-то забываем освобождать.
Но все это и так известно.
Aleksandr (2002-03-20 12:52:00) [10]У меня кода 310 тысяч строк... долго смотреться будет. Просто от чего поток может теоретически съедать память и (самое главное) процессор?
Alx2 (2002-03-20 12:27:00) [11]Код бы посмотреть... мало ли отчего