2008-10-24 21 views
5

Tengo una aplicación core .NET que necesita generar un número abitrario de subprocesos. Estos procesos deben poder acceder a algún tipo de objeto de estado en la aplicación central.Comunicación entre procesos en .NET

¿Cuál es la mejor técnica? Moveré una gran cantidad de datos entre procesos (Bitmaps), por lo que debe ser rápido.

Respuesta

4

Tengo requisitos similares y estoy usando Windows Communication Foundation para hacerlo en este momento. Sin embargo, mis tamaños de datos son probablemente un poco más pequeños.

Como referencia estoy haciendo aproximadamente 30-60 solicitudes de aproximadamente 5K-30K por segundo en una máquina de cuatro núcleos. WCF ha estado resistiendo bastante bien hasta ahora.

Con WCF tiene las ventajas adicionales de elegir un protocolo de transporte y un modo de seguridad adecuado para su aplicación.

3

Si realmente necesita tener procesos separados siempre hay Named Pipes que funcionaría bastante bien.

Sin embargo, ¿sería suficiente un límite de AppDomain? Entonces podrías organizar los objetos y las cosas serían mucho más fáciles. Su aplicación podría trabajar instancias compartidas del mismo objeto utilizando el atributo MarshalByRefObject.

4

vacilaría en mover datos grandes, me inclinaría a mover los punteros a datos grandes en su lugar, es decir, a los archivos mapeados en la memoria.

+0

Explique cómo eso funcionaría a través de los límites del proceso. – FlySwat

+0

Creo que Jarvis quiere decir, usar archivos asignados de memoria para compartir memoria entre dos o más procesos. – Jonke

+2

Por supuesto. Los archivos de memoria asignados están diseñados específicamente para poder compartir memoria entre procesos. Curiosamente, C# 4.0 ahora tiene incorporadas clases de MMF solo para esta tarea. –

3

Puede usar .NET remoto para la comunicación entre procesos (IPC) con IpcChannel. De lo contrario, puede buscar contenedores de memoria compartida y otros formularios de IPC.

EDITAR: Hay un MSDN article que compara WCF con una variedad de métodos que incluyen Remoting. Sin embargo, a menos que esté leyendo incorrectamente el gráfico de barras, muestra que Remoting es igual o ligeramente mejor (a diferencia del otro comentario). También hay un blog post sobre WCF vs. Remoting. La publicación del blog muestra claramente que Remoting es más rápido para objetos binarios y si está pasando Bitmaps (objetos binarios), parece que Remoting o memoria compartida u otra opción de IPC podría ser más rápida, aunque WCF podría no ser una mala elección.

5

WCF probablemente ajustarse a la ley ...

Aquí hay una really good article on .NET remoting para realizar un análisis intensivo distribuida. Aunque la interacción remota ha sido sustituido por WCF, el artículo es relevante y muestra cómo hacer que las llamadas de forma asíncrona, etc.

Este article contrasts WCF to .NET remoting - EDITAR: la clave quitan aquí muestra que WCF rendimiento supera a la interacción remota de datos pequeña pero se acerca al rendimiento de Remoting a medida que aumenta el tamaño de los datos.

0

También es posible utilizar el Marco de mensajes de Eneter. El marco ofrece el uso del componente de intermediario donde todos los clientes pueden suscribirse para recibir notificaciones cuando se cambia el estado. Para conectar clientes con el agente. El marco ofrece Named Pipes, Tcp o Http. Pero parece que lo mejor sería usar las tuberías con nombre.

Más información sobre el marco se puede encontrar en link text.

Cuestiones relacionadas