powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Теряется быстродействие при использовании Modify
14 сообщений из 14, страница 1 из 1
Теряется быстродействие при использовании Modify
    #34644613
Hapk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объект DataWindow,
На rowfocuschanged event стоит
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
long row
string st, color_s
row = this.GetRow()
if row <=  0  then return

color_s = string(rgb( 180 , 180 , 180 ))
st = string (row)

st += ","+color_s

this.Modify("nom.Background.Color = '0~tif(getrow()="+st+",if(getrow()/2=round(getrow()/2,0),rgb(235,255,235),rgb(255,255,255)))'");
this.Modify("name.Background.Color = '0~tif(getrow()="+st+",if(getrow()/2=round(getrow()/2,0),rgb(235,255,235),rgb(255,255,255)))'");
this.Modify("secondname.Background.Color = '0~tif(getrow()="+st+",if(getrow()/2=round(getrow()/2,0),rgb(235,255,235),rgb(255,255,255)))'");
this.Modify("phone.Background.Color = '0~tif(getrow()="+st+",if(getrow()/2=round(getrow()/2,0),rgb(235,255,235),rgb(255,255,255)))'");

на mousemove event стоит
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
string st
int c_row
st = GetBandAtPointer()
if Pos(st,'detail~t') =  0  then return
st = right(st,len(st)-len('detail~t'))

c_row = integer(st)

if c_row <> curent_row then
	curent_row = c_row
	this.SelectRow( 0 ,FALSE)
	this.SelectRow(curent_row,TRUE)	
end if

Уже при незначительном перемещении стрелкой вниз (при смене строк) начинает терятся быстродействие и увеличивается нагрузка на ЦП. Если поставить наоборот (как и планировалось Modify на mousemove, а selectrow на rowfocuschanged), то поводив мышкой по строкам тратися много времени на selectrow() при нажатии кнопки мыши.

Вопросы: Почему? Как поправить? Есть ли альтернативы?
Заранее спасибо.
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34644667
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написать в конструкторе (или выставить свойства в дизайнере) ОДИН РАЗ:
Код: plaintext
1.
2.
3.
this.Modify("nom.Background.Color = '0~tif(mod(getrow(), 2) = 0, rgb(235, 255, 235), rgb(255, 255, 255))'~t" + &
            "name.Background.Color = '0~tif(mod(getrow(), 2) = 0, rgb(235, 255, 235), rgb(255, 255, 255))'~t" + &
            "secondname.Background.Color = '0~tif(mod(getrow(), 2) = 0, rgb(235, 255, 235), rgb(255, 255, 255))'~t" + &
            "phone.Background.Color = '0~tif(mod(getrow(), 2) = 0, rgb(235, 255, 235), rgb(255, 255, 255))'~t" )
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34644743
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HapkОбъект DataWindow,
На rowfocuschanged event стоит
Код: plaintext
1.
...

на mousemove event стоит
Код: plaintext
1.
...
Ужоснах
HapkВопросы: Почему? Как поправить? Есть ли альтернативы?
Заранее спасибо.Альтернативы есть всегда. Что сделать-то надо?

ИвановНННаписать в конструкторе (или выставить свойства в дизайнере) ОДИН РАЗ
...Выражение чуть сложнее
Код: plaintext
if(getrow()=currentRow(),rgb(180,180,180),if(mod(getrow(),2)=0,rgb(235,255,235),rgb(255,255,255)))
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34644771
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, напрямую в свойствах объекто не задать условия?
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34644787
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99Выражение чуть сложнее
Код: plaintext
if(getrow()=currentRow(),rgb( 180 , 180 , 180 ),if(mod(getrow(), 2 )= 0 ,rgb( 235 , 255 , 235 ),rgb( 255 , 255 , 255 )))

Это смотря что сделать надо:
если в mousemove стоит SelectRow, то менять свойство background у столбца у выделенной строки особого смысла нет
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34644793
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
недописал... Enter нажал
а если убрать SelectRow, а оставить SetRow, то тогда стоит написать сложнее
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34644910
_Guest_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HapkОбъект DataWindow...

Какая верисия PB ???

Такое поведение (использование expresions связанных с цветом !!!???) было замечено (предположительно происходило накопление буфера, что тормозило переход
на др.строку и retrieve()) на версиях где-то до 10.2 или 10.0.1
билды не помню, о чем было сообщено в Sybase.
Они вроде исправили.

Пробуйте более поздние билды.
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34645354
Hapk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99, urvas, можно и в свойствах написать, но один из вопросов стоит "Почему?", так как такого не должно было быть и изначально необходимо было сделать выделение цветом а не selectrow при mousemove. Важно было знать почему он начинает тормозить.

_Guest_1, спасибо за ответ, я тоже такого мнения (такое же поведение в С++ если не уничтожать GDI объекты). Версия билдера 5.0, попробую достать какую нибудь посвежее.
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34645378
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hapk

1.Событие rowfocuschanged обрабатывается при смене строки несколько раз, поэтому Ваш скрипт должен быть с флагом, который бы запускал нужный процесс только один раз. Тогда быстродействие будет значительно выше.
2.Modify очень тяжелая функция, поэтому её лучше вызывать один раз, т.е. объединить все изменения в одну Modify.
3.SelectRow лучше сделать в свойствах строки, чтобы не терять время на обработку любого написанного скрипта.
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34646213
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HapkPL99, urvas, можно и в свойствах написать, но один из вопросов стоит "Почему?", так как такого не должно было быть и изначально необходимо было сделать выделение цветом а не selectrow при mousemove. Важно было знать почему он начинает тормозить.
Тормозит потому, что в событии mousemove написан явно неподходящий для этого события скрипт.
Если надо сделать выделение цветом текущей записи, то следует в свойствах поля написать приведенный ранее код, а не отлавливать mousemove, а код из событий убрать совсем.
Если же Вы хотите чтобы цвет строки изменялся в зависимости от положения курсора мыши, то возникает резонный вопрос - а зачем?
AIS1.Событие rowfocuschanged обрабатывается при смене строки несколько разНе совсем понимаю, что Вы имеете ввиду? При изменении текущей строки событие rowfocuschanged срабатывает ровно один раз.
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34646277
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99
AIS1.Событие rowfocuschanged обрабатывается при смене строки несколько разНе совсем понимаю, что Вы имеете ввиду? При изменении текущей строки событие rowfocuschanged срабатывает ровно один раз.

Думаю, что все-таки дважды:
1-й раз - когда старая строка теряет фокус, 2-й - когда фокус получает новая строка.
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34646566
_Guest_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AIS Думаю, что все-таки дважды:
1-й раз - когда старая строка теряет фокус, 2-й - когда фокус получает новая строка.

Код: plaintext
1.
2.
3.
Description 

Occurs when the current row changes in the DataWindow.
А если срабатывает дважды - смотрите свой код.
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34647957
edmikeca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS
Думаю, что все-таки дважды:
1-й раз - когда старая строка теряет фокус, 2-й - когда фокус получает новая строка.
Думаю, что Вы путаете с двумя разными событиями: RowFocusChanging и RowFocusChanged
...
Рейтинг: 0 / 0
Теряется быстродействие при использовании Modify
    #34703468
Этот эффект
(снижение быстродейсвия после modify)

был ярко выражен на старых версиях билдера в dw c сотней колонок или типа того
с большим кол-вом расчетных атрибутов (цвет и тп)

Боролся

-уменьшением кол-ва команд
Одна большая эффективнее чем много маленьких и по скорости и результату

-применением расчетных колонок и использованием его значения в атрибутах
всех колонок строки (например для выделения текущей строки)

Вообще для начала
"Подложите последний EBF" - стандартная рекомендация службы техподдержки Sybase
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Теряется быстродействие при использовании Modify
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]