powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Функция dw_1.update ()
19 сообщений из 19, страница 1 из 1
Функция dw_1.update ()
    #40142746
Soft54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите существует ли способ оптимизации функции update (), она каждый раз "пробегает" все строки (например 10000 и более) в DataWindow в поиске изменённой строки, когда точно известно (программисту) какая строка обновилась и она одна?
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142770
osxl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soft54 [игнорируется] 
Нет. Можно реализовать свой псевдо аналог функции update, но зачем? Если обновление dw_1.update() одной строки в таблице 360+ тыс. занимает порядка ~7мс?
...
Изменено: 22.02.2026, 02:51 - osxl
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142771
Soft54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osxl [игнорируется] 

Спасибо за ответ (долой перфекционизм!). Спокойней стало от того что её нет, но был бы у меня студент дал бы ему задание написать такую функцию update(row)
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142773
Soft54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osxl  22.02.2026, 02:47
[игнорируется]
Soft54 [игнорируется] 
Нет. Можно реализовать свой псевдо аналог функции update, но зачем? Если обновление dw_1.update() одной строки в таблице 360+ тыс. занимает порядка ~7мс?
Это наводит на мысль, что update () работает как-то иначе чем последовательных перебор строк в поиске обновленных строк в DataWindow, например есть "внутренний" массив содержащий номера обновленных и новых строк -:)
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142786
osxl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soft54 [игнорируется] 

Излишний перфекционизм вреден. Но если вам нравиться шагать вперед держа флаг перфекционизма высоко поднятым, это ваше право.
Я от этого избавился.
Студент тут не нужен, нужно всего лишь понимание того, что и как работает в PB DW, и за 10-15 минут вы спокойно можете наваять такую функцию.
Имхо, зачем изобретать по новой велосипед, который уже есть и прекрасно едет...
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142788
osxl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soft54  22.02.2026, 09:37
[игнорируется]
Это наводит на мысль, что update () работает как-то иначе чем последовательных перебор строк в поиске обновленных строк в DataWindow, например есть "внутренний" массив содержащий номера обновленных и новых строк -:)
Так и есть. Использует внутренний механизм отслеживания на основе флагов (статуса) строк и столбцов.
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142789
Soft54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osxl#40142788[/
Благодарю за ответ, но не согласен с тем, что аналогичную update () функцию можно написать за 20 минут. Про то, что каждая строка и каждый столбец в DataWindow обладает статусом (status flag), который может принимать значения NotModified!, DataModified!, New!, NewModified! , мне известно -:) и они доступны разработчику ПО.
...
Изменено: 23.02.2026, 07:25 - Soft54
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142791
osxl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soft54  23.02.2026, 07:20
[игнорируется]
Благодарю за ответ, но не согласен с тем, что аналогичную update () функцию можно написать за 20 минут.
И в чём проблема? Пусть за 25-30 не спеша, потягивая кофе/чай/etc на выбор... ))
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142792
Soft54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osxl [игнорируется] ,
что Вы думаете по поводу того, что если DataWindow получает из БД более 100 строк для работы (правки и т п.) то можно утверждать что взаимодействие с БД в данном случае спроектировано неправильно для повседневной работы?
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142793
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soft54  23.02.2026, 09:06
[игнорируется]
что Вы думаете по поводу того, что если DataWindow получает из БД более 100 строк для работы (правки и т п.) то можно утверждать что взаимодействие с БД в данном случае спроектировано неправильно для повседневной работы?
Я думаю, что задачи про оптимизацию способов отображения многих тысяч строк, над которыми ломают головы программисты, возникают из непонимания того факта, что никакой нормальный юзверь 1000 СТРОК НИКОГДА С ЭКРАНА ЧИТАТЬ НЕ СТАНЕТ. Вместо того, чтобы скорректировать постановку задачи, они мучаются над тем, как заставить быстрее ехать квадратное колесо при условии, что оно должно оставаться квадратным.
...
Изменено: 23.02.2026, 10:24 - Garya
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142794
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garya  23.02.2026, 10:23
[игнорируется]
Soft54  23.02.2026, 09:06
[игнорируется]
что Вы думаете по поводу того, что если DataWindow получает из БД более 100 строк для работы (правки и т п.) то можно утверждать что взаимодействие с БД в данном случае спроектировано неправильно для повседневной работы?
Я думаю, что задачи про оптимизацию способов отображения многих тысяч строк, над которыми ломают головы программисты, возникают из непонимания того факта, что никакой нормальный юзверь 1000 СТРОК НИКОГДА С ЭКРАНА ЧИТАТЬ НЕ СТАНЕТ. Вместо того, чтобы скорректировать постановку задачи, они мучаются над тем, как заставить быстрее ехать квадратное колесо.
Вообще то да..
Надо тогда сократить текст и показать только то что изменено.
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142795
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green2  23.02.2026, 10:25
[игнорируется]
Надо тогда сократить текст и показать только то что изменено.
Точнее, только то, что юзверю надо. А вот что ему надо, как это правильно у него выяснять, в какой последовательности и как выводить на экран, над этим нужно поработать. Прежде всего, провести беседу с самим юзверем, чтобы он рассказал, какие телодвижения и для чего он делает.

____
Вспомнилось...

Случилась у меня в стародавние времена (год примерно 1998-99) история с одной дамой, которая хорошо себя зарекомендовала перед руководством тем, что выполняемую ранее вручную работу систематизировала с помощью таблиц Excel. Таблицы постепенно разрослись до невообразимых размеров, стали тормозить, были сложности многопользовательского доступа к данным... И передо мною поставили задачу всё это автоматизировать каким-то иным способом, для чего я должен был взаимодействовать с ней как с главным заказчиком.
Она привыкла работать в Excel, используя функционал автофильтров, и требовала от меня, по сути, реализовать один-в-один такой же функционал при доступе к SQL-серверу. Я пытался её убедить в том, что выводить тысячи строк из базы данных на экран - это плохая идея, что при работе с SQL-сервером всё будет работать ещё медленнее, чем в Excel, но это была весьма харизматичная дама ничего не хотела слушать. Наши пикировки дошли до уровня высшего руководства. Высшее руководство не стало разбираться и потребовало от меня, чтобы я просто тупо выполнял все капризы этой дамы. Ок, сказал я, выполню. Пару месяцев работы программиста и нате, получите.
- Почему всё так медленно? В Excel и то быстрее!
- Разве я вас об этом не предупреждал? Вы получили то, чего хотели.
- Но в таком режиме работать же невозможно!...
После очередных разборов полётов у высшего руководства теперь уже ей было приказано внимательно слушать, что уже я ей говорю. На этот раз она сделала над собой усилие и, наконец, призналась в том, что ни она сама, и ни один из её сотрудников не читает содержимое отфильтрованных строк таблицы, а смотрит лишь на их количество. А смотреть на содержимое строк начинает, когда их число путём последовательного наложения дополнительных условий фильтации не уменьшится примерно до 10-20.
Я реализовал вычисление на сервере числа строк по сложным комбинациям фильтров и вывод на экран юзверю числа строк, а не самих строк, а сами строки выводились отдельной строкой "Показать". Всё стало работать быстро и все оказались довольны.
...
Изменено: 23.02.2026, 11:45 - Garya
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142796
osxl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soft54  23.02.2026, 09:06
[игнорируется]
что Вы думаете по поводу того, что если DataWindow получает из БД более 100 строк для работы (правки и т п.) то можно утверждать что взаимодействие с БД в данном случае спроектировано неправильно для повседневной работы?
Если dw получает 100 строк и более, значит так задумал разработчик. ))
В первую очередь нужно смотреть на область автоматизации и задачу... Все зависит от области применения.

И вот думаю, с чего вы решили что при обновлении механизм dw перебирает все строки в поисках измененных?
Если Вам было известно о флагах/состоянии строк/столбцов DW?
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142799
Soft54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osxl [игнорируется] 
Чтобы обнаружить (прочитать) эти флаги
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142800
osxl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soft54 [игнорируется] 
Добавлю.
Имхо:
Получить 100, 200, 1000+ из БД - не проблема.
Отдать все на редактирование - плохая идея.
Превращать DW в аналог Excel - плохая идея.
Редактировать нужную строку в другом окне - хорошая идея.

У нас к примеру диапазон документов за три дня превышает 1000 записей.
Что оптимальнее выбрать 1000 строк и использовать фильтры в DW не отсылая каждый раз SQL запрос на сервер, или при смене фильтра который включает несколько параметров, делать новую выборку?
Тут решать вам, как разработчику. Везде есть свои плюсы и минусы. На дворе уже не 99, компьютеры давно подняли свою производительность.
Выбор средства и технологии реализации - ваш выбор...
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142801
osxl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soft54  23.02.2026, 13:16
[игнорируется]
osxl [игнорируется] 
Чтобы обнаружить (прочитать) эти флаги
Да, думаю что для этого есть механизм, который хранит флаги не рядом с строками, а в виде массива изменений, как вы и предположили позже.
Еще мне стало скучно, ради интереса реализовал предложенный вами метод update по номеру строки. Время обновления datastore c одной строкой, равен по времени обновлению datawindow с 360тыс строк. В пределах погрешности. Так же между 6-8 мс. Так что овчинка выделки не стоит.
...
Изменено: 23.02.2026, 13:39 - osxl
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142802
Soft54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osxl [игнорируется] 

Полностью с Вами согласен, на практике нет универсальных решений
...
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142803
Soft54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osxl [игнорируется] 

Спасибо за участие, Ваши эксперименты с dw подтверждают наши с вами умозаключения ))
И ещё, раз так, то нет смысла в вызове функции modifiedcount () перед вызовам функции update (), с другой стороны и вреда тоже нет в смысле производительности, она даст мгновенный ответ "заглянув под капот"?
...
Изменено: 23.02.2026, 14:09 - Soft54
Рейтинг: 0 / 0
Функция dw_1.update ()
    #40142813
osxl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soft54  23.02.2026, 13:55
[игнорируется]
И ещё, раз так, то нет смысла в вызове функции modifiedcount () перед вызовам функции update (), с другой стороны и вреда тоже нет в смысле производительности, она даст мгновенный ответ "заглянув под капот"?
Да. Конечно. Здесь перфекционизм излишен )). Уверен что есть куча других узких мест в программе, которые больше влияет на производительность.
Использование данной функции зависит от подхода к редактированию и вводу данных, если DW в виде Grid, еще и оптовый подход, т.е. изменение нескольких строк за раз, а потом сохранение всех изменений разом, тогда есть смысл вызывать modifiedcount() перед закрытием. Но если было удаление, modifiedcount() не включит удаленные строки, требуется вызывать еще и deletedcount().
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Функция dw_1.update ()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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