Lo que debería calificarse como & # 8220; tarea de larga duración & # 8221; ser ejecutado en un hilo SwingWorker?

StackOverflow https://stackoverflow.com/questions/1634062

  •  06-07-2019
  •  | 
  •  

Pregunta

Sé cómo usar hilos de SwingWorker, pero todavía no tengo criterios precisos para decidir cuándo usar uno o no.

I / O parece obvio, pero ¿qué pasa con los métodos que operan en colecciones potencialmente grandes?

Un criterio podría ser el tiempo de ejecución real, pero ¿qué tipo de número (en ms) calificaría?

¿Fue útil?

Solución

Lo importante es la capacidad de respuesta de la interfaz de usuario.

Jef Raskin (de la fama de Mac UI) dijo que el retraso máximo debería limitarse a 50 ms. Las pautas del sistema operativo RISC decían 100 ms. Los clics en los botones son de aproximadamente 50 ms, por lo que si desea actuar en el lanzamiento, debe actuar rápido, ya que el modelo de usuario generalmente es hacer clic para la acción. Por encima de 140 ms, no solo algunas respuestas no responden, sino que la UI parece estar desconectada de las acciones del usuario (ver, por ejemplo, Hacks mentales de O'Reilly).

250-350 ms y el usuario (normal) pensará que algo salió mal.

En el otro lado de las cosas, necesita 8 fps (y el renderizado incluido) para tener la ilusión de desplazamiento de animación (por ejemplo). Y sabes cómo les gusta a los jugadores sus fps.

Sin embargo, prefiero un software que funcione más o menos que el mejor software posible que no está disponible. Dicho esto, tener a Opera encerrado durante unos minutos mientras golpeaba el disco en medio de esta edición no me gustó.

Otros consejos

Para mí serían 1 s.

Si su procesamiento toma más que eso, su IU se congelará. En esa situación es mucho mejor mostrar un "ocupado" pintura o barra de progreso.

¿Cuánto tiempo le gustaría esperar para que CUALQUIER aplicación que use se vuelva receptiva? Digamos que abre su IDE o MS-Word o cualquier otro. Si observa la mayoría de las veces, cuando la aplicación se está cargando, aparece una barra de progreso u otra animación, incluso cuando el documento / proyecto / lo que sea es lo suficientemente pequeño como para abrirse en 2 s.

No hay un número específico, es una cuestión de lo que se supone que debe hacer la aplicación y qué tan receptiva debe ser la interfaz gráfica de usuario. El mejor enfoque es hacer algunas pruebas, nadie puede responder esto por usted. (aunque los comentarios pueden serle de gran utilidad para determinar qué pruebas debe hacer)

Una tarea de ejecución larga sería lo suficientemente larga como para que el usuario notara fallas o demoras al volver a dibujar la IU. Establecer el texto de una etiqueta probablemente no sea una ejecución larga, pero solo tomar unos pocos milisegundos para dibujar una imagen en un mapa de bits fuera de la pantalla puede retrasar el rediseño de la interfaz de usuario el tiempo suficiente para que se note.

Básicamente, si no puede predecir cuánto tiempo llevará el procesamiento, será una buena idea colocarlo en un hilo separado, ya que mantendrá su aplicación receptiva incluso en casos extremos con datos incorrectos, etc. Son buenos candidatos

  • Realizar operaciones costosas en todos los campos de un modelo.
  • Dependiendo de un origen de datos externo o destino. Nunca se sabe si eso podría ser una unidad de red lenta o similar.

Pero, ¿por qué no simplemente hacer una regla, si tiene un bucle (cualquiera por / mientras) luego va en un SwingWorker?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top