none
shared memory ?? RRS feed

  • Frage

  • Hallo

    Ich möchte mit zwei Programmen auf die gleichen Variablen (gleicher Speicherplatz) zugreifen können.
    Die Struktur wäre eine (kurze) Liste oder Array einer Klasse( GuiId, integer, integer ).
    Gerne möchte ich auch im Programm erfahren ob sich an den Werten etwas verändert hat.
    Des Weiteren müssen nicht beide Programme immer gleichzeitig laufen.

    Ich habe etwas gegoogelt, gelesen von "shared memory", NetNamedPipeBinding-Klasse, NET Remoting, Sockets, DDE ,  TCP, IPC ...
    Mein Fragezeichen im Kopf wird immer grösser.

    Kann mir jemand sagen, was die beste / einfachste Möglichkeit ist?

    Dank für Info.
    Gruss Peter


    Ich hatte mich leider nicht präzise genug ausgedrückt.
    Ich benötige nur den Austausch zwischen zwei Exe's die auf dem gleichen PC, unter dem gleichen User laufen.
    • Bearbeitet peter haus Freitag, 8. März 2013 16:24
    Donnerstag, 7. März 2013 15:54

Antworten

  • Hallo Peter,

    ich muss gestehen, ich habe so was noch nicht Programmiert und mein Ratschlag wäre es in einer Anwendung zu machen. Ich denke mal, es gibt da wichtige Gründe es anders zu machen, die ich nicht kennen. ;)

    Nun eine Möglichkeit die mir einfällt, wäre ein 3. Programm  zu machen was einen Server darstellt. Das könnte auch eines der beiden Programme machen, die laufen. Es müsste halt nur die Ganze Zeit laufen.

    Der Server kümmert sich dann um den Datenaustausch, Synchronisation und gegebenen falls um die Persistenz.   

    Die 2. ist du schaust dir mal das Caching an. Microsoft hat da eine sehr ausführliche Beschreibung zu raus gebracht.

    Link zu Seite.

    Link zum PDF.

    Ich hab das vor ein paar Jahren mal über flogen und wenn ich das richtig im Kopf habe kann man einen InMemory Cache einrichten den sich Programme teilen.

    MFG

    Björn 


    • Als Antwort markiert peter haus Montag, 11. März 2013 16:17
    Donnerstag, 7. März 2013 19:30

Alle Antworten

  • Hallo Peter,

    ich muss gestehen, ich habe so was noch nicht Programmiert und mein Ratschlag wäre es in einer Anwendung zu machen. Ich denke mal, es gibt da wichtige Gründe es anders zu machen, die ich nicht kennen. ;)

    Nun eine Möglichkeit die mir einfällt, wäre ein 3. Programm  zu machen was einen Server darstellt. Das könnte auch eines der beiden Programme machen, die laufen. Es müsste halt nur die Ganze Zeit laufen.

    Der Server kümmert sich dann um den Datenaustausch, Synchronisation und gegebenen falls um die Persistenz.   

    Die 2. ist du schaust dir mal das Caching an. Microsoft hat da eine sehr ausführliche Beschreibung zu raus gebracht.

    Link zu Seite.

    Link zum PDF.

    Ich hab das vor ein paar Jahren mal über flogen und wenn ich das richtig im Kopf habe kann man einen InMemory Cache einrichten den sich Programme teilen.

    MFG

    Björn 


    • Als Antwort markiert peter haus Montag, 11. März 2013 16:17
    Donnerstag, 7. März 2013 19:30
  • Hi Peter.

    Da du von "Erfahren, wenn sich Werte ändern" redest, klingt das für mich sehr nach Eventhandling. Das geht IIRC bei Datenbanken direkt nicht. Du brauchst also eine Zwischeninstanz. Ich würde in dem Fall ein Programm antriggern, dass auf einem Server läuft, und das eine Liste über die verbundenen Clienten verwaltet. Dieses kann dann eingehende Daten mit z.B. einer Datenbank abgleichen und an alle verbundenen Clienten (via TCP etwa) eine Nachricht senden, wenn die Daten manipuliert wurden.

    Eventuell kann man das auch über PHP realisieren, indem ein Script als Zwischeninstanz dient, die Aktualisierung dann via MySQL erledigt und z.B. eine EMail herumschickt, wenn sich Werte ändern. Wir haben so eine Art Monitoring mit EMail-Rücksendung in Betrieb.

    Es ist halt die Frage, zu was diese Rückmeldung dienen soll: nur Information? soll eine Reaktion erfolgen? z.B. lokale Aktualisierung?

    Was mir gerade auch noch einfällt (vorausgesetzt die beiden Programme laufen so, dass sie ein gemeinsam zugreifbares Verzeichnis haben) ein einfaches Speichern der Daten in einer Datei. Diese könnte man via FileSystemWatcher überwachen und Änderungen mitbekommen (wobei dann nicht sofort klar ist, welche Art von Änderung, das müsste man selbst analysieren oder mitloggen, z.B. mit einem Änderungsprotokoll). Aber das dürfte relativ leicht realisierbar sein, wenn die Daten nicht zu kompliziert sind. Jedes Programm sollte zudem für sich irgendwo gespeichert haben, auf welchem Stand es ist, also wann nach seinem Wissen die Datei das letzte Mal geändert wurde, und damit bei Programmstart ggf. einmal synchronisieren.

    Wie immer ... viele Wege führen nach Rom. Einige sind steiniger als andere ... ;-)

    LG, Dennis.

    Freitag, 8. März 2013 10:14
  • Hallo Dennis,

    vielen Dank für die Antwort.

    Ich hatte mich leider nicht präzise genug ausgedrückt.
    Ich benötige nur den Austausch zwischen zwei Exe's die auf dem gleichen PC unter dem gleichen User laufen.

    Herzliche Grüsse

    Peter

    Freitag, 8. März 2013 16:21
  • Hi Palin,

    vielen Dank.

    Ich werde mir die Links anschauen.

    Gruss Peter

    Freitag, 8. März 2013 16:24