Hay varias buenas opciones:
- Message Queue
- Canalizaciones con nombre (directamente)
- Archivos mapeados de memoria
- WCF on Named Pipes o MSMQ
Cualquiera de estos es más que suficientemente rápido, por lo que sugeriría que sea más fácil de implementar.
Message Queue (MSMQ) en mi opinión es el más simple de usar, le da transferencia de objeto (a diferencia de las secuencias) y le da persistencia de transporte opcional (útil en caso de que el remitente o el receptor no se estén ejecutando). Todo esto es cierto para WCF sobre MSMQ pero WCF significa más sobrecarga, complejidad y configuración involucradas y ningún valor adicional (en este caso).
Enviar esta manera:
MessageQueue queue = new MessageQueue(".\\private$\\ImagesQueue");
Message msg = new Message
{
Formatter = new BinaryMessageFormatter(),
Body = myImage,
Label = "Image"
};
queue.Send(msg);
reciben:
MessageQueue queue = new MessageQueue(".\\private$\\ImagesQueue");
msg = queue.Receive(TimeSpan.FromMilliseconds(100));
if (msg != null)
{
msg.Formatter = new BinaryMessageFormatter();
myImage = (MyImage)msg.Body;
}
Queue tiene que ser creado antes de su uso. Usted puede hacer eso cuando la aplicación se inicia
tienen esta en su clase:
private const string queueName = ".\\private$\\ImagesQueue";
y en la solicitud de inicialización/puesta en marcha asegúrese de que tiene la cola:
if (!MessageQueue.Exists(queueName)
{
MessageQueue myQueue = MessageQueue.Create(queueName);
}
Con este mecanismo de cola, El motor no tiene que esperar a que se complete el visor. Esto mejoraría mucho el rendimiento percibido porque puede generar la siguiente imagen (en realidad, el número de ellas), mientras que la anterior aún se está viendo. No es tan fácil de lograr con archivos mapeados en la memoria.
MSMQ es un componente estándar de Windows pero debe habilitarse en las características de Windows.
Ser pedante aquí ... sus propias pruebas unitarias deberían probar si es correcto y confiable. –
@ AdamHouldsworth No me di cuenta de que el OP dice que incluso están usando pruebas unitarias. Significando que esa declaración también era algo irrelevante. –
@ Mr. Disppointment Realmente no. Las pruebas unitarias se destinarían a demostrar la fiabilidad y el éxito funcional del enfoque: las piedras angulares de la pregunta. También el punto pedante fue que si no estuvieran usando pruebas unitarias para probar esto, deberían hacerlo. –