Estoy creando winform para procesar (convertir archivos txt a tiff) gran cantidad de archivos. Puse todo el código detrás de un botón (btnProcess). ¿Es esta una buena idea? Funciona, pero me di cuenta de que cuando me alejé del formulario win y volví a este, vi una ventana en blanco hasta que se completa el proceso. Escuché sobre el trabajador de fondo. ¿Cuál es el propósito del trabajador de fondo?¿Cómo mantengo una IU receptiva mientras proceso grandes cantidades de datos?
Respuesta
Lo que necesita aquí es multithreading. Eso significa que dos (o más) hilos de código se ejecutarán en paralelo. Uno de ellos sería el hilo de UI, el responsable de dibujar la ventana. En su caso, está ejecutando su código en el hilo de la interfaz de usuario y bloqueando así la representación de la interfaz de usuario mientras se ejecuta su código.
El propósito del BackgroundWorker es iniciar una operación en un nuevo hilo y es lo que necesita.
Además, dado que se trata de una gran cantidad de archivos, es posible que desee considerar más de un subproceso de fondo para poder procesar varios archivos en paralelo –
Absolutamente. Sin embargo, vale la pena señalar que esto beneficiará principalmente a las CPU multi-core (la mayoría de las CPU recientes de todos modos). Esto también será más fácil de lograr mediante el subprocesamiento múltiple de un bucle for usando algo así como las Extensiones paralelas en lugar de crear X BackgroundWorkers. –
@Raj: debe tener cuidado cuando comience a hablar de File IO. Este es el proceso más lento y el multi-threading de un conjunto de operaciones de archivos no garantiza ningún aumento en el rendimiento. – IAbstract
La clase BackgroundWorker permite a ejecutar una operación en un hilo separado, dedicado. Las operaciones como y las descargas que consumen tiempo pueden hacer que su usuario interfaz (IU) parezca haya dejado de responder mientras están ejecutando . Cuando desee una interfaz de usuario receptiva y tenga que enfrentarse a largas demoras asociadas con dichas operaciones, la clase BackgroundWorker brinda una solución conveniente .
la página que vinculado anteriormente contiene un completo ejemplo BackgroundWorker.
Si eres nuevo en el paradigma de multi-threading, sugiero que uses el background worker, es una abstracción de la programación multihilo. –
Si estamos utilizando todos los métodos de servicio en modo asíncrono, Tarea. Entonces, puede degradar el rendimiento (en aplicaciones grandes)? –
Esa es una pregunta muy amplia. Si ejecuta demasiadas tareas en paralelo, sobrecargará el sistema en algún momento. Sin embargo, sin más detalles, es imposible decir si significa 5 tareas o 100. –
Depende de su aplicación. Si se trata de una aplicación de propósito único que no es extremadamente larga y el único problema es que la pantalla no pinta. Que es lo que me parece, simplemente lanza una aplicación.hacerEventos en el circuito y termina con eso.
- 1. Procesando grandes cantidades de datos usando multiprocesamiento
- 2. Almacenar grandes cantidades de datos: ¿DB o sistema de archivos?
- 3. ¿Manera eficiente de analizar grandes cantidades de datos?
- 4. ASP.NET MVC: devolver grandes cantidades de datos de FileResult
- 5. patrón de 3 niveles y grandes cantidades de datos
- 6. Práctica recomendada para almacenar grandes cantidades de datos con J2ME
- 7. Dibujando grandes cantidades de píxeles en OpenGL
- 8. Exportar grandes cantidades de datos al cliente en asp.net
- 9. Restful API - manejo de grandes cantidades de datos
- 10. Archivar grandes cantidades de datos antiguos en SQL Server
- 11. OutOfMemory al leer grandes cantidades de datos usando Hibernate
- 12. ¿Cómo debo almacenar cantidades extremadamente grandes de datos de tráfico para una fácil recuperación?
- 13. jQuery y anexar grandes cantidades de HTML
- 14. Eliminar atómico para grandes cantidades de archivos
- 15. problema mmap, asigna grandes cantidades de memoria
- 16. Ideas de diseño para mostrar grandes cantidades de datos en una tabla html
- 17. ¿Cómo puedo leer datos grandes del archivo de proceso?
- 18. Rendimiento de Java con grandes cantidades de RAM
- 19. Mejor almacén de datos para grandes cantidades de datos con gran cantidad de lecturas y escrituras
- 20. ¿Cómo almacenan/recuperan los videojuegos de manera eficiente grandes cantidades de datos?
- 21. Buscar grandes cantidades de texto constantemente actualizado en mysql
- 22. Trazando cantidades masivas de datos
- 23. Can bittorrent peers handle seeding grandes cantidades de torrents inactivos
- 24. manera mas potente para almacenar grandes cantidades de cadenas estáticas
- 25. ¿Cuál es la alternativa a los cursores para recuperar grandes cantidades de datos de una base de datos?
- 26. el manejo de grandes cantidades de MKMapView Anotaciones
- 27. Enhebrado: procesamiento en segundo plano de la aplicación C++ Cinder para mantener la IU receptiva
- 28. git: ¿cómo me fusiono entre ramas mientras mantengo algunos conjuntos de cambios exclusivos de una rama?
- 29. Qué tipo de datos de columna debo usar para almacenar grandes cantidades de texto o html
- 30. aplicación de base de multiproceso Delphi no con grandes cantidades de datos
intente hacer su pregunta lo más descriptiva posible para ayudar a otros usuarios que enfrentan problemas similares y también para atraer las mejores respuestas posibles. "pregunta de winform" no es probable que consiga ninguno de los dos objetivos. –
Buena sugerencia. Me gusta el nuevo título, tiene más sentido. Simplemente no sabía esas palabras elegantes o jerga técnica. –