Google Chrome e IE8 (entre otros) tienen como objetivo proporcionar una mayor fiabilidad/estabilidad mediante el aislamiento de cada pestaña (página web) en un proceso separado (sobre simplificado, lo sé).Diseño multiproceso de Chrome/IE8, ¿es posible en .NET?
Esto parece ser mucho más pesado que varios hilos, pero tiene el beneficio principal de un bloqueo en un proceso que no reduce toda la aplicación.
Parece que la arquitectura de procesos múltiples se ha utilizado durante mucho tiempo en aplicaciones del lado del servidor (por ejemplo, servidores web), pero estos son procesos sin una GUI dedicada. Es interesante que ahora se esté utilizando en las interfaces de usuario de las aplicaciones de escritorio.
¿Cómo podría implementar esto en, por ejemplo, una aplicación Windows Forms .NET? ¿Es posible?
Process.Start() es un primer lugar obvio para buscar, pero la GUI del nuevo proceso no está estrechamente integrada con la GUI de la aplicación de host. Es una nueva aplicación independiente, no un sub control/ventana de la aplicación de host, como lo es con Chrome/IE8.
(Para todos los interesados a Scott Hanselmann escribió una buena introducción a la IE8 multi-process architecture here..)
[Actualización]
Más específicamente:
¿Cómo puede un "sub-proceso" separada rendir directamente a la UI dentro del "proceso principal"? ¿Es esto realmente lo que está sucediendo, o como se sugirió en los comentarios, el subproceso usa el IPC para pedirle al proceso principal que lo represente?
1, especialmente las advertencias de comunicación entre dominios. Eso puede ser mucho más costoso de lo que los desarrolladores a veces esperan. –
¿Pueden 2 AppDomains en un solo proceso actualizar la interfaz de usuario de forma independiente, es decir, pestañas separadas? Además, como dice Scott Hanselmann, aún es posible reducir todo el proceso desde un dominio de aplicación. – Ash
@Ash asumiendo un proceso/AppDomain es el proceso "GUI", responsable de recibir comandos de otros procesos y reflejarlos; y eventing regreso a ellos, ¿por qué no? –