![]() |
|
|
|
Ссылка на сообщение #1 | ||
|
Administrator
|
Какие проблемы у SysOperationProgress?
Здесь aEremenko: Update_RecordSet
я советовал пользоваться классом SysOperationProgress для отображения текущего статуса выполнения. Было очень много намеков, что этот класс работает плохо. Для обсуждения создал новую ветку.
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #2 | ||
|
злыдень
|
Смотри ветку:
Тормозит ли градусник 30 минут из 40 тратить на перерисовку текста - это ненормально, притом что кода там - 2 строчки поправить
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
||
|
|
|
|
Ссылка на сообщение #3 | ||
|
Administrator
|
Цитата:
Сообщение от Recoilme
Смотри ветку:
Тормозит ли градусник 30 минут из 40 тратить на перерисовку текста - это ненормально, притом что кода там - 2 строчки поправить Я могу только повторить - разберитесь со стандартным кодом. Разберитесь с tutorial_progress как работает прогресс-бар в двухуровневой и трехуровневой системе. Ок. Recoilme, большое спасибо за ваш ценный вклад. Еще проблемы есть? Я, например, очень хотел бы понять что за проблемы с переключением компании. Прогрусс-бар вообще не должен зависеть от компаний. А еще?
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #4 | ||
|
Участник
|
код:
PHP код:
без < 1сек а если у нас 10 000 000 циклов (например бежим по InventTrans) получается прогресс бар отожрет почти 2 часа Последний раз редактировалось ivas; 19.04.2007 в 10:20. |
||
|
|
|
|
Ссылка на сообщение #5 | ||
|
Administrator
|
Цитата:
Сообщение от ivas
код:
PHP код:
без < 1сек а если у нас 10 000 000 циклов (например бежим по InventTrans) получается прогресс бар отожрет почти 2 часа Представьте нормальную работу... Представили? Нет-нет, вы представьте действительно нормальную работу Аксапты: в каждом цикле делается поиск, расчет какой-нибудь себестоимости, проверка какого-нибудь дурацкого кредитного лимита, запись результатов расчета по нескольким таблицам, неизбежные блокировки... Как вы думаете, сколько часов займет в Аксапте выполнение 10млн циклов при НОРМАЛЬНОЙ работе? Вы предлагаете пользователю ждать все это время, не имея никакой информации о ходе работ? Я правильно понимаю, что вы предлагаете пользователю сидеть несколько часов-суток перед пустым экраном? Я не ошибся? Да, прогресс-бар сам занимает некоторое количество ресурсов. Но его польза при больших нормальных обработках гораздо больше, нежели какие-то жалкие несколько процентов дополнительного времени... Возвращаясь к вашему коду. Вы просто не умеете его готовить. Во-первых, вы не установили setTotal. Во-вторых, если отображение прогресс-бара выполняет дольше чем сама работа, то надо пользоваться методом UpdateInterval(), чтобы установить большее время между обновлениями. Посмотрите же в метод update(), люди!
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #6 | ||
|
Участник
|
согласен, setCount по запарке вставил
вот по вашему совету Код: #Define.LoopCount(100000)
static void Job80(Args _args)
{
SysOperationProgress pBar = new SysOperationProgress();
int time = timeNow();
int i, j;
;
pBar.setCaption("Обработка");
pBar.updateInterval(10); // типа ускорение?
for (i = 0; i < #LoopCount; i++)
{
pBar.setText(strfmt("Операция № %1", i));
pBar.incCount();
j++;
}
info(strfmt("Прошло: %1 сек.", timeNow() - time));
}дело в том что действительно сталкивался с этим в реальной обработке: предварительная выгрузка inventTrans (15000000 строк) в мапу с прогресс баром 4часа без 2часа решилось добавлением пары строк PHP код:
|
||
|
|
|||
| За это сообщение автора поблагодарили: Recoilme (5). | |||
|
|
Ссылка на сообщение #7 | ||
|
Administrator
|
Типа да. Только в вашем случае вполне можно поставить и 100.
В смысле?
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #8 | ||
|
злыдень
|
Хоть кто то вменяемый тут есть..Спасибо ivas)
Я решил проблему точно так же, только код вставил в sysoperationprogress, чтоб не возвращаться к этому вопросу в дальнейшем X++: //VKUL -- Quick Progress -- countIncrement[_idx] +=_progressCountIncrement; if (countIncrement[_idx] == updateCount[_idx]) { this.setCount(progressCount[_idx] + countIncrement[_idx],_idx); countIncrement[_idx] = 0; } //VKUL -- Quick Progress -- //this.setCount(progressCount[_idx] + _progressCountIncrement,_idx);
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ Последний раз редактировалось Recoilme; 19.04.2007 в 10:55. |
||
|
|
|
|
Ссылка на сообщение #9 | ||
|
Участник
|
Сергей, при таком большом количестве вызовов уже вступает в действие общая тормознутость пользовательского кода. На фоне сотни тысяч вызовов методов setText() и incCount() несколько десятков раз обновление формы просто теряется.
updateInterval() тут уже не поможет. Можно написать дополнительный метод, который объединяет в себе изменение текста и кол-ва шагов - получим выигрышь около 50%. А можно перенести функциональность метода update() в свой код - т.е. вызывать обновление только по истечение интервала времени - в этом случае торможения практически не будет
__________________
Axapta v.3.0 sp5 kr2 |
||
|
|
|||
| За это сообщение автора поблагодарили: mazzy (5). | |||
|
|
Ссылка на сообщение #10 | ||
|
Administrator
|
Цитата:
Так каков вывод? этим классом нужно/можно/нельзя пользоваться?
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #11 | ||
|
Administrator
|
Запустил у себя тест:
X++: #Define.LoopCount(100000) static void Job6(Args _args) { SysOperationProgress pBar = new SysOperationProgress(); int time = timeNow(); int i, j; ; pBar.setCaption("Обработка"); pBar.setTotal(#LoopCount); //pBar.updateInterval(100); for (i = 0; i < #LoopCount; i++) { pBar.setText(strfmt("Операция № %1", i)); //pBar.incCount(); j++; } info(strfmt("Прошло: %1 сек.", timeNow() - time)); } если выключить один из методов: 6 сек. если выключить все методы: 0 сек. В данном случае длительность updateInterval(100) не влияет. Просто если его устанавливать, то окошко не показывается.
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #12 | ||
|
Участник
|
Цитата:
Так каков вывод? этим классом нужно/можно/нельзя пользоваться?
а есть варианты? |
||
|
|
|
|
Ссылка на сообщение #13 | ||
|
Участник
|
Цитата:
В данном случае длительность updateInterval(100) не влияет
|
||
|
|
|
|
Ссылка на сообщение #14 | ||
|
Administrator
|
Варианты конечно есть.
Хорошо. Нужно. Идем дальше. Какие у этого класса проблемы (помимо "общей тормознутости пользовательского кода")? здесь прозвучало очень интересное сообщение о проблемах при переключении между компаниями? Такое действительно у кого-нибудь было? Какие еще проблемы есть?
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #15 | ||
|
Участник
|
Конечно, можно
Простейшее X++: int tm = timeNow(); int interval = 1; ... if (timeNow()-tm >= interval) { pBar.incCountText(strfmt("Операция ? %1", i), i-pBar.getCount_RU()); tm = timeNow(); } incCountText() - добавил метод для одновременного измения текста и прогресса PS миднайт не учитываю для простоты
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 19.04.2007 в 10:59. |
||
|
|
|
|
Ссылка на сообщение #16 | ||
|
Administrator
|
Блин, сделайте нормальную обработку: Изменяйте что нибудь в базе и сравните.
Или сделайте вместо куцего ++j паузу хотя бы на 200 милисекунд sleep(200); Сравните.
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #17 | ||
|
Administrator
|
Да, но заманаешься такое в код вставлять. Но еще раз спасибо.
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #18 | ||
|
Участник
|
Цитата:
здесь прозвучало очень интересное сообщение о проблемах при переключении между компаниями?
Такое действительно у кого-нибудь было? Цитата:
Или сделайте вместо куцего ++j паузу хотя бы на 200 милисекунд sleep(200);
Сравните. это не задержка просто проверял не выкинул ли оптимизатор мой цикл ![]() кстати он вообще есть в аксапте? всмысле оптимизатор |
||
|
|
|
|
Ссылка на сообщение #19 | ||
|
Administrator
|
__________________
Работа на результат! + AX: FAQ, Скриншоты, Библиотека + NAV: FAQ, Скриншоты, Axapta vs Navision |
||
|
|
|
|
Ссылка на сообщение #20 | ||
|
сибиряк
|
Мое предположение, у меня и было. Ситуация: создание нескольких сотен заказов, создание закупки по ним (это все в компании 1), и создание продажи по ним (в компании 2). Обработка по продажам и закупкам счетов на оплату. Для перехода между компаниями - changecompany. Дык вот через раз Аксапта "путалась" в какой компании она разносит. Причем путалась на ровном месте (то есть в различных частях кода). Пока не "отключил" прогресс в классах обработки именно для этой операции. После этого - ни одной ошибки. Так что претензии не к самому прогрессу, а к связке его работы в рамках нескольких компаний.
__________________
С уважением, Вячеслав. |
||
|
|
|
|
| Теги |
| progress bar, sysoperationprogress, баг, бегунок, законченный пример, полезное, смена компании |
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Проблемы с Exists Join | Logger | DAX: Программирование | 28 | 28.04.2010 02:54 |
| Enterprise Portal: какие могут быть проблемы? | sminex_ax | DAX: Администрирование | 0 | 16.05.2008 12:37 |
| Проблемы быстродействия Axapta 3.0 | Alexandr A. Osipkin | DAX: Администрирование | 37 | 16.02.2007 22:43 |
| Проблемы работы ERP в многофилиальной и территориально разнесённой компании СНГ. | SlavaK | DAX: Прочие вопросы | 18 | 02.03.2004 15:25 |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|