|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Здравствуйте ! Помогите решить проблему: Есть ДВ в котором отображается более 20000 записей. У каждой записи есть поле active типа чекбокса, которое пользователь устанавливает/снимает, потом кликает на кнопку, на которой такой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Есть ли в PB аналог дельфийской функции ProcessMessage ? Заранее спасибо за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2009, 17:49 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
lioner пишет: > После клика на кнопке приложение зависает пока работает цикл по записям > ДВ... Ну и чёрт с ним. > Есть ли в PB аналог дельфийской функции ProcessMessage ? Yield(). Приятной борьбы с нажатиями кнопок в процессе . Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2009, 17:57 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Dim2000 lioner пишет: > После клика на кнопке приложение зависает пока работает цикл по записям > ДВ... Ну и чёрт с ним. > Есть ли в PB аналог дельфийской функции ProcessMessage ? Yield(). Приятной борьбы с нажатиями кнопок в процессе . Спасибо, помогло. Приложение уже не висит,но хотелось бы блокировать само окно в котором в цикле обрабатываются записи ДВ и сделать курсор мышки в виде песочных часов, но только в пределах клиентской области этого окна. Возможно такое ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2009, 18:09 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
lionerЗдравствуйте ! Помогите решить проблему: Есть ДВ в котором отображается более 20000 записей. У каждой записи есть поле active типа чекбокса, которое пользователь устанавливает/снимает, потом кликает на кнопку, на которой такой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Есть ли в PB аналог дельфийской функции ProcessMessage ? Заранее спасибо за помощь. 1. Надо УБРАТЬ идиотизм в виде embedded SQL ( insert into flat.reestrdolg ), и вместо этого просто собирать insertы в датастор. 2. Цикл нужно писать ЗАРАНЕЕ определив dw_list.rowcount(), он что у вас, меняется в процессе цикла? 3. Цикл нужно писать не на ВСЕ ряды, а через FIND на active =1 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2009, 18:46 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Филипп +1 Абсолютно согласен ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2009, 21:07 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
а если религия позволяет использовать хранимые процедуры, то в ДВ update properties можно указать хранимку параметрами которой могут быть даже computed fields тогда скрипт сводится к: dw_list.update() commit; ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2009, 22:13 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Филипп1. Надо УБРАТЬ идиотизм в виде embedded SQL ( insert into flat.reestrdolg ), и вместо этого просто собирать insertы в датастор. 2. Цикл нужно писать ЗАРАНЕЕ определив dw_list.rowcount(), он что у вас, меняется в процессе цикла? 3. Цикл нужно писать не на ВСЕ ряды, а через FIND на active =1 1. Как собирать insertы в датастор ? Можно пример кода ? С учетом ваших пунктов 2 и 3, упростил цикл так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 10:19 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
lioner, Вот этот кусок: Код: plaintext 1. 2. 3.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 10:36 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Riska, Поправка: Не lds.InsertRow(li_i), a Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 10:39 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Riskalioner, Вот этот кусок: Код: plaintext 1. 2. 3.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
По вашему совету сделал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 10:50 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Все строго IMHO. Если изменения чекбокса приводят к изменению статуса записи в DW, то, на мой взгляд, прав Dmitry. Напишите хранимку и поставте ее в Stored Procedure Update. Если это "религия" не позволяет, перекройте event SQLPreView(...), напишите там все, что Вам надо. В результате все сведется к тривиальному li_Res = DW.Update() ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 10:53 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
В догонку. Если требуется скорость, не используйте дот нотацию для доступа к значениям полей. Используйте DW.GetXXXXX(), будет быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 10:56 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Решил проверить скорость простого апдейта: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 12:12 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Так может база тормозит? ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 12:18 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
spas2001Так может база тормозит? Перегрузил комп, перезапустил сервак, все равно 2 минуты... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 12:24 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Тут вот еще какое дело. dw_list содержит такой запрос (устанавливает поле active в 1): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Как добраться из всех 30000 записей ДВ к тем записям, в которых пользователь САМ изменил поле active? Тогда можно было бы : 1) insert ... select (быстро отработает) 2) удаление из таблицы тех записей, в которых пользователь САМ изменил поле active 3) вставка в таблицу тех записей, в которых пользователь САМ изменил поле active Сам dw_list не обновляем, пользователь может редактировать только поле active. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 13:03 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
lionerТут вот еще какое дело. dw_list содержит такой запрос (устанавливает поле active в 1): Как добраться из всех 30000 записей ДВ к тем записям, в которых пользователь САМ изменил поле active? Написать цикл на GetNextModified ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 18:20 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
>>После клика на кнопке приложение зависает пока работает цикл по записям ДВ... Я думаю, в вашем случае может помочь SharedObjects и PBNI. При помощи SharedObjects можно сделать несколько потоков и, соответственно, писать в базу из нескольких потоков. Будет быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 18:26 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
ФилиппНаписать цикл на GetNextModified Не думаю, что с GetNextModified станет быстрее, ведь в самой функции идет тот же самый цикл линейного поиска измененной записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 18:31 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
PBСпецФилиппНаписать цикл на GetNextModified Не думаю, что с GetNextModified станет быстрее, ведь в самой функции идет тот же самый цикл линейного поиска измененной записи. Чушь собачья, читайте внимательнее постановку задачи... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2009, 19:20 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Embedded SQL и DataStore работают примерно также грустно по скорости на большом количестве строк. Чтобы ускориться склеивайте insert'ы ручками (например штук по 100) и запускайти их через EXECUTE IMMEDIATE. Зависит от базы, например для MS SQL скорость возрастает в десятки раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2009, 09:07 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
lioner Как добраться из всех 30000 записей ДВ к тем записям, в которых пользователь САМ изменил поле active? Формировать самому массив измененных строк в itemchanged а затем обрабатывать только строки из этого массива, очищая его после Update(). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2009, 12:50 |
|
Как избежать зависания приложения ?
|
|||
---|---|---|---|
#18+
Igor Domnithlioner Как добраться из всех 30000 записей ДВ к тем записям, в которых пользователь САМ изменил поле active? Формировать самому массив измененных строк в itemchanged а затем обрабатывать только строки из этого массива, очищая его после Update(). Надо делать как Филипп написал, через GetNextModified. А чтобы эта ф-я показывала только то что изменил сам юзер, надо после программного заполнения перед отдачей юзеру на редактирование вызвать ResetUpdate(), который сбросит флаги изменения. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2009, 14:20 |
|
|
start [/forum/topic.php?fid=15&msg=35938728&tid=1336313]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 303ms |
total: | 440ms |
0 / 0 |