Что следует квалифицировать как «долгосрочную задачу» для выполнения в потоке SwingWorker? - PullRequest
2 голосов
/ 28 октября 2009

Я знаю, как использовать потоки SwingWorker, но у меня все еще нет точных критериев, чтобы решить, когда использовать один из них или нет.

Ввод / вывод кажется очевидным, но как насчет методов, работающих с потенциально большими коллекциями?

Критерием может быть фактическое время работы, но какое число (в мс) будет соответствовать?

Ответы [ 5 ]

3 голосов
/ 28 октября 2009

Важно то, насколько отзывчивым является пользовательский интерфейс.

Джеф Раскин (из известности Mac UI) сказал, что максимальная задержка должна быть ограничена 50 мс. Руководство RISC OS заявило 100 мс. Нажатие кнопки занимает около 50 мс, поэтому, если вы хотите действовать после освобождения, вам нужно действовать быстро, поскольку пользовательская модель, как правило, требует действий. Свыше 140 мс он не только не отвечает, но и отклики пользовательского интерфейса не связаны с действиями пользователя (см., Например, «Разумные взломы» О'Рейли).

250-350 мс, и (обычный) пользователь подумает, что что-то пошло не так.

С другой стороны, вам нужно 8 кадров в секунду (и включает рендеринг), чтобы иметь иллюзию анимации (например) прокрутки. И вы знаете, как геймеры любят их FPS.

Однако я предпочитаю программное обеспечение, которое более или менее работает, чем лучшее из возможных программ, которые недоступны. Сказав это, опера заблокировалась на несколько минут, пока он забивал диск в середине этого редактирования, меня не порадовало.

1 голос
/ 28 октября 2009

Для меня это будет 1 с.

Если ваша обработка займет больше этого, ваш пользовательский интерфейс остановится. В такой ситуации гораздо лучше показать «занятую» краску или индикатор выполнения.

Сколько времени вы хотели бы подождать, пока ЛЮБОЕ приложение, которое вы используете, станет отзывчивым? Допустим, вы открываете свой IDE или MS-Word или любой другой. Если вы замечаете в большинстве случаев, когда приложение загружается, отображается индикатор выполнения или какая-либо другая анимация, даже если документ / проект / что-либо достаточно маленькое, чтобы открыться через 2 с.

0 голосов
/ 28 октября 2009

По сути, если вы не можете предсказать, сколько времени займет обработка, было бы неплохо поместить ее в отдельный поток, поскольку это будет поддерживать отзывчивость вашего приложения даже в крайних случаях с плохими данными и т. Д.

  • Выполнение дорогостоящих операций со всеми полями в модели.
  • В зависимости от внешнего источника данных или места назначения. Вы никогда не знаете, может ли это быть медленный сетевой диск или что-то подобное.

Но почему бы просто не создать правило, , если имеет цикл (любой на / время) , то он идет в SwingWorker?

0 голосов
/ 28 октября 2009

Длительное задание будет достаточно продолжительным, чтобы пользователь мог заметить сбои или задержки при перерисовке пользовательского интерфейса. Задание текста надписи, вероятно, не является «длительным», но всего лишь несколько миллисекунд для рисования изображения в закадровом растровом изображении могут задержать перерисовку пользовательского интерфейса достаточно долго, чтобы быть заметной.

0 голосов
/ 28 октября 2009

Не существует определенного числа, это вопрос того, что приложение должно делать, и насколько отзывчивым должен быть графический интерфейс. Лучший подход - провести тестирование, никто не может ответить за вас. (хотя комментарии могут быть вам полезны при определении того, какое тестирование вам нужно сделать)

...