Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Теряется быстродействие при использовании Modify / 14 сообщений из 14, страница 1 из 1
06.07.2007, 17:07
    #34644613
Hapk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется быстродействие при использовании Modify
Объект 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
06.07.2007, 17:26
    #34644667
ИвановНН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется быстродействие при использовании Modify
Написать в конструкторе (или выставить свойства в дизайнере) ОДИН РАЗ:
Код: 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
06.07.2007, 17:53
    #34644743
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется быстродействие при использовании Modify
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
06.07.2007, 18:01
    #34644771
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется быстродействие при использовании Modify
А что, напрямую в свойствах объекто не задать условия?
...
Рейтинг: 0 / 0
06.07.2007, 18:07
    #34644787
ИвановНН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется быстродействие при использовании Modify
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
06.07.2007, 18:09
    #34644793
ИвановНН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется быстродействие при использовании Modify
недописал... Enter нажал
а если убрать SelectRow, а оставить SetRow, то тогда стоит написать сложнее
...
Рейтинг: 0 / 0
06.07.2007, 19:05
    #34644910
_Guest_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется быстродействие при использовании Modify
HapkОбъект DataWindow...

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

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

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

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

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

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

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

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

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

Боролся

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

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

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


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