Hi,
anbei eine kleine Klasse zur schnellen Interprozesskommunikation über MemoryMappedFiles.
Die Komponente kann benutzt werden um Daten zwischen verschiedenen AppDomains oder Prozessen einfach und schnell auszutauschen.
Mehrere Teilnehmer teilen sich dabei einen Kanal. Schreibt ein Teilnehmer eine Byte-Nachricht, wird sie von allen anderen Teilnehmer Empfangen.
Anwendungsprogramm:
class Program
{
static void Main(string[] args)
{
IpcMmfTransition participantA = new IpcMmfTransition("TestChannel");
IpcMmfTransition participantB = new IpcMmfTransition("TestChannel");
IpcMmfTransition participantC = new IpcMmfTransition("TestChannel");
participantA.DataAvailable += (transition, bytes) =>
{
Console.WriteLine("A received: " + Encoding.ASCII.GetString(bytes));
};
participantB.DataAvailable += (transition, bytes) =>
{
Console.WriteLine("B received: " + Encoding.ASCII.GetString(bytes));
};
participantC.DataAvailable += (transition, bytes) =>
{
Console.WriteLine("C received: " + Encoding.ASCII.GetString(bytes));
};
participantA.Run();
participantB.Run();
participantC.Run();
while(participantC.GetNumberOfParticipants() < 3)
Thread.Sleep(1);
participantA.Transmit(Encoding.ASCII.GetBytes("A says Hello"));
participantB.Transmit(Encoding.ASCII.GetBytes("B says Hello"));
participantC.Transmit(Encoding.ASCII.GetBytes("C says Hello"));
Thread.Sleep(500);
participantA.Dispose();
participantB.Dispose();
participantC.Dispose();
Console.ReadKey();
}
}
}
Das Programm mit dem benötigten Microsoft.Diagnostics.Runtime-Assembly befindet sich im Anhang.
Da ich die Komponente auch in meinen aktuellen Projekt einsetze, nehmen ich Fehler und anregungen gerne entgegen.
Liebe Grüße,
Stu
Edit: Mit NuGet
Schlagwörter: Interprozesskommunikation; Memory Mapped Files
Du solltest NuGet für das Mitführen der Microsoft.Diagnostics.Runtime verwenden.
Diese ist nämlich nach https://www.microsoft.com/net/dotnet_library_license.htm lizenziert und darf IIRC nicht so direkt im Programm oder im ZIP mitgeführt werden.
Zudem gibt es von Microsoft.Diagnostics.Runtime bisher kein Stable Release!
.. also alles andere als empfehlenswert für den produktiven Betrieb.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich hatte kein NuGet dafür gefunden - wohl nicht gut genug gesucht. Ich werds ändern.