![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Ak47black |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
Здравствуйте.
Пишу алгоритм и на первый взляд он кажется безобидным но жрет аш 30-40 % проца при таймере 50ms. Может чтонибудь предложите. Попробую пояснить точно что я делаю. У меня есть общий файл которым пользуются приложение и драйвер. В программе пользуюсь им при помощи мапинга, тоеть получаю указатель и пользуюсь им на протяжении всей работы программы. В этом общем файле храниться маска изменений, размер файла (высота экрана в пикселях)*(длина экрана в пикселях), тоесть на каждый пиксель по одному байту. Если пиксель был изменён то байт равняется 1 если нет то 0. (Маска храниться не перевёрнутой) Задача : Из этого файла составить массив координат прямоугольников в которых произошли изменения, при этом нужно получить минимальное их количество. Я пытаюсь решить эту задачу в два алгоритма.
Вот что я пытаюсь сделать на деле
ScreenWidth, ScreenHeight - высчитывается при старте программы. PosSize - длина массива PosArr, так как массив PosArr создаться при старте максимальной длины. PosP - указатель на память файла, (мапинг).
PosArr : array of TRectEx Может кто сможет что сказать как тут оптимизировать? Заранее спасиба. |
||||
|
|||||
| ivan219 |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Как вареант предлогаю not found, found поставить первым в проверке, выделить его в отдельный if, Integer(PosP) в отдельную переменную.
Или даже так:
Также:
выдели в отдельные переменные зачем их 2 раза вычислять. И помойму вот так будет правильнее:
Это сообщение отредактировал(а) ivan219 - 29.6.2007, 19:26 |
||||||||||
|
|||||||||||
| ivan219 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Вобщем что-то вроде этого:
По поводу этого:
обойтись некак нельзя, вобще она нужна только один раз вовсех последующих циклах только тормазит. Это сообщение отредактировал(а) ivan219 - 29.6.2007, 19:37 |
||||
|
|||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
ivan219, тут может есть какой другой подход есть, этот не особо быстрый чтото.
|
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
Нашел узкое место
|
|||
|
||||
| aktuba |
|
||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Жэсть... Это получается, проверка идет 20 раз в секунду???? Для чего??? Думаешь за это время многое может поменяться???
А как нашел? Надеюсь не в ручную? -------------------- ![]() |
||||
|
|||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
Это сообщение отредактировал(а) Ak47black - 30.6.2007, 11:37 |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Ну а как вышел из этой ситуации???
|
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
ivan219, еще один написал алгоритм который работает с
после отбора. И тем самым сокращает количество использования этого кода. Это сообщение отредактировал(а) Ak47black - 30.6.2007, 12:11 |
|||
|
||||
![]()
|
| Правила форума "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. |