Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скорость отрисовки в цикле, тормозит отрисовка в picturebox 
V
    Опции темы
Kirill89
Дата 5.3.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: 3
Всего: 4



Есть сетка, нужно закрасить все true эллементы.
DrawSpace - PictureBox
Один эллемент трисовывается быстро, но когда поле заполняется, начинает сильно тормозить! Как с этим бороться?!
Я постарался по максимуму сократить число цикла m, но при большом поле это не помогает. Может быть чем-то можно заменить этот цикл? Или как-то его оптимизировать?
Код

Sub ReDraw()
DrawGread
For i = 0 To SizeX
    For j = 0 To SizeY
        If Pole(i, j) = True Then
            For m = 0 To 20
                DrawSpace.Line ((i * 200) + (m * 10), j * 200)-((i * 200) + (m * 10), (j + 1) * 200)
            Next m
        End If
    Next j
Next i
End Sub



--------------------
PM MAIL WWW   Вверх
daNick
Дата 5.3.2007, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.8.2006
Где: Казахстан, Астана

Репутация: нет
Всего: нет



почему бы не прорисовывать не линиями, а сразу прямоугольниками?

drawspace.line(i*200,j*200)-((i+1)*200,(j+1)*200),drawplace.forecolor,bf

или тебе не подходит вариант с закрашенными прямоугольниками?
--------------------
Долго не кончать - преимущество мужчины, а не оратора.Я так много читал о вреде курения, что решил бросить... читать.(с) Сергей Довлатов
PM MAIL ICQ   Вверх
cardinal
Дата 5.3.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Код

For i = 0 To SizeX
    For j = 0 To SizeY
...

Ну для начала можно сделать Step 200 для i, j и Step 10 для m и заменить
DrawSpace.Line ((i * 200) + (m * 10), j * 200)-((i * 200) + (m * 10), (j + 1) * 200)
на
Код

DrawSpace.Line (i + m, j)-(i + m, j + 200)

Уже будет гораздо быстрее...
Код

DrawGread

Во первых где эта фунция (выложил бы полностью), а во вторых Grid пишется...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Naghual
Дата 5.3.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Там прикол со свойством AutoRedraw!
Если оно True - тогда отрисовка будет занимать ХХХ времени!
Выствь его в False, а по окончании рисования, вызывай метод Refresh


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Kirill89
Дата 5.3.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: 3
Всего: 4



daNick, да, действительно не подумал. Спасибо - тупить стало меньше намного, но если поле большое, то не спасает.
cardinal, пора мне подтягивать свой английский  smile спасибо, что подправил.
Я ещё кое-что переписал, но всё-равно, нехватает скорости.  smile 
Есть ещё предложения по оптимизации?
Вот новые кусочки:
Код

Sub ReDraw()
DrawGrid
For i = 0 To SizeX
    For j = 0 To SizeY
        If Pole(i, j) = True Then
            DrawSpace.Line ((i * 200), (j * 200))-((i + 1) * 200, (j + 1) * 200), RGB(0, 0, 0), BF
        End If
    Next j
Next i
End Sub

Sub DrawGrid()
DrawSpace.Cls
DrawSpace.Width = (SizeX * 200) + 8
DrawSpace.Height = (SizeY * 200) + 15
For i = 0 To DrawSpace.Width Step 200
        DrawSpace.Line (i, 0)-(i, DrawSpace.Height)
Next i
For j = 0 To DrawSpace.Height Step 200
        DrawSpace.Line (0, j)-(DrawSpace.Width, j)
Next j
End Sub

Naghual, да, если отключить Autoredraw, то скорость заметно вырастает, но это мелькание! Как от него избавиться!?


--------------------
PM MAIL WWW   Вверх
Naghual
Дата 6.3.2007, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Пожалуйста.
Вот статья , показывающая в примере как избавится от этого досадного эффекта.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Kirill89
Дата 6.3.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: 3
Всего: 4



Цитата(Naghual @  6.3.2007,  00:36 Найти цитируемый пост)
Пожалуйста.
Вот статья , показывающая в примере как избавится от этого досадного эффекта. 

Неподходит. Это, я так понял, только с использованием изображений, а у меня их нет.

Приношу свои извинения. Всё исправил. Я просто слишком часто отрисовывал всю сетку вместе со всеми эллементами. У меня отрисовка была от mouse_move, в независимости от состояния нажатия клавишь, сделал, что отрисовывается, только если меняется значения эллемента и клавиша нажата. Теперь не тупит. Всем большое спасибо.


--------------------
PM MAIL WWW   Вверх
Naghual
Дата 6.3.2007, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



продумай еще момент с отрисовкой только изменившейся области, а не всего грида


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Kirill89
Дата 6.3.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: 3
Всего: 4



Цитата(Naghual @  6.3.2007,  11:33 Найти цитируемый пост)
продумай еще момент с отрисовкой только изменившейся области, а не всего грида 

Точно! У меня было, что при закраске рисует черный квадрат, теперь сделал, что при очистке просто рисует белый  smile
Ещё раз спасибо.


--------------------
PM MAIL WWW   Вверх
Naghual
Дата 7.3.2007, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



А что это такое будет - то?  smile


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Kirill89
Дата 8.3.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: 3
Всего: 4



Цитата(Naghual @  7.3.2007,  22:07 Найти цитируемый пост)
А что это такое будет - то?

На самом деле сразу несколько программ:
1)У меня есть игрушка японские кроссворды, единственный её минус был в том, что для написания нового кроссворда мне много мучится приходилось, а юзеру - попросту заново грузить всё приложение.
А это - новый движок, который позволит сделать удобные обновления, в том числе и обновления с сайта программы при помощи самой программы.
2)Я небуду пока-что разглашать, потому что не уверен, что всё получится... Я ещё не раз буду задавать вопросы по этой проге, поэтому потом всё узнаете  smile 


--------------------
PM MAIL WWW   Вверх
Naghual
Дата 9.3.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Kirill89, ясно. Прикольная задумка.
Желаю удачи.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Kirill89
Дата 9.3.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: 3
Всего: 4



Цитата(Naghual @  9.3.2007,  21:29 Найти цитируемый пост)
Желаю удачи.

Спасибо!  smile 


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.