none
Pointer in einer Datei speichern RRS feed

  • Frage

  • Guten Abend,

    ich habe ein Problem beim Speichern von Pointer in Dateien.

    Ich möchte eine Datei erstellen und unter gewissen Keys, Pointer abspeichern z.B.

    Name = (Pointer)

    Störung = (Pointer)

    eine andere unabhängige C# Instanz welche auf dem selben Rechner läuft, soll auf diese Pointer zugreifen können um die Werte zu lesen. Ich habe meines wissens keine Möglichkeit eine Verbindung zwischen den Programmen herzustellen auser über schreiben und lesen in Dateien was mir zu langsam ist. Alternativ über den localhost was mir aber auch zu langsam ist, ich möchte, dass diese direkt auf den RAM zugreifen können was ich als schnellsten Weg sehe.

    Beste Grüße

    Mittwoch, 1. Juni 2016 16:29

Antworten

  • Hallo,

    Pointer gibt es schon mal nicht in einer managed Umgebung... Direkter Speicherzugriff würde alleine durch die Garbage Collection problematisch werden, da sie Objekte mal einfach so ;) im Speicher verschiebt... Auch kommt hinzu, dass Windows den Zugriff auf Speicher zwischen verschiedenen Prozessen nicht so einfach erlaubt.

    Wenn Du aber zwei .NET Programme hast, so wäre Remoting[1] eine eingebaute Möglichkeit und lokal via IPC (Shared Memory)[2] relativ fix.

    Gruß Elmar

    [1] den Legacy Hinweis darfst Du ignorieren, da die Möglichkeit in .NET 4.0 drin sind.

    [2] IPC Beispiel Lösung

    Mittwoch, 1. Juni 2016 18:21
    Beantworter

Alle Antworten

  • Hi,
    zum Glück geht das so nicht, wie Du Dir das vorstellst. Damit wären Tür und Tor für Schadsoftware geöffnet. Außerdem ist technisch kein Zugriff möglich, wenn sich die Programm in unterschiedlichen virtuellen Bereichen (Segmenten) befinden.

    Um zwischen zwei Programm Daten auszutauschen, gibt es viele Möglichkeiten. Wenn es schnell sein muss, reduziere den auszutauschenden Datenumfang und nimm NamedPipes.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Mittwoch, 1. Juni 2016 17:00
  • Hallo,

    Pointer gibt es schon mal nicht in einer managed Umgebung... Direkter Speicherzugriff würde alleine durch die Garbage Collection problematisch werden, da sie Objekte mal einfach so ;) im Speicher verschiebt... Auch kommt hinzu, dass Windows den Zugriff auf Speicher zwischen verschiedenen Prozessen nicht so einfach erlaubt.

    Wenn Du aber zwei .NET Programme hast, so wäre Remoting[1] eine eingebaute Möglichkeit und lokal via IPC (Shared Memory)[2] relativ fix.

    Gruß Elmar

    [1] den Legacy Hinweis darfst Du ignorieren, da die Möglichkeit in .NET 4.0 drin sind.

    [2] IPC Beispiel Lösung

    Mittwoch, 1. Juni 2016 18:21
    Beantworter
  • Hi,

    was du machen willst nennt man shared memory.

    Das ist wie Peter Fleischer schon geschrieben hat nicht ohne weiteres möglich, solange der Pointer auf den Adress-Bereich eines fremden Prozesses zeigt.

    Such mal bei Google nach "shared memory C#" dann bekommst du ein paar Beispiele wie sowas funktioniert.

    Wie z.B.:

    https://sharedmemory.codeplex.com/

    https://www.nuget.org/packages/SharedMemory/

    http://blog.klaus-b.net/post/2008/07/06/Shared-Memory-in-verwaltetem-Code.aspx

    http://www.codeproject.com/Articles/242386/VB-NET-MEMORY-MAPPING-ACROSS-DIFFERENT-RUNNING-APP

    Regards,

    David


    Sonntag, 5. Juni 2016 08:40