![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| LamerTM |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Здравствуйте.
Есть такая прога:
После нажатия на кнопку, выполняется RefreshScreenshot 1000 раз после чего комп начинает притормаживать (все приложения). По диспетчеру задач не видно чтобы память была чем-то занята, но по признакам похоже что памяти не хватает. После закрытия приложения всё восстанавливается. Вчера вообще был прикол, всё так заглючило что программы не запускались (винда глюканулась). Как сделать чтобы глюков таких не было. |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Это происходит потому что ты создаёшь 1000 объектов типа TImage, но не высвобождаешь память от них...
-------------------- Ll 2 |
|||
|
||||
| LamerTM |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Я не создаю объекты TImage, я создаю TCanvas. Тот объект Screenshot: TImage создается один раз и навсегда, потом в него копируются изображения функцией CopyRect. А много раз создается объект сс: TCanvas. Но там вроде стоит в конце cc.Free. Сейчас закомментировал всю работу с Screenshot: TImage. Осталось только cc: TCanvas. И всё равно тормозит. Значит дело в cc: TCanvas. Там вроде Handle этого TCanvas теряется при присвоении cc.Handle := GetDC(GetDesktopWindow); Может в этом дело? |
|||
|
||||
| LamerTM |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Сейчас закомментил строку
и всё тормозить перестало, теперь объект удаляется после создания. Но скриншоты-то не делаются! Что делать не знаю. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
не знаю, освобождается ли DC в деструкторе TCanvas
(скорее всего, даже нет, т.к. у объекта нет информации, как его освобождать) так что можно попробовать сделать ReleaseDC в диспетчере задач есть ещё столбец "объекты GDI" (если нет, его можно включить в настройках) там ещё не помешало бы посмотреть а то контексты - такой же ресурс как и память... -------------------- qqq |
|||
|
||||
| LamerTM |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Всё супер!
И всё заработало! Единственное, что я не уверен что эту ReleaseDC надо использовать именно с такими параметрами. Но работает вроде. Ничего не тормозит, в диспетчере задач количество объектов GDI не увеличивается. Спасибо! В репу дать не могу, сорри, тут у вас ограничения на количество постов. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
первый параметр обычно совпадает с параметром, переданным в GetDC - т.е. дескриптор окна -------------------- qqq |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |