Benutzer mit den meisten Antworten
Pointer in einer Datei speichern

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
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.
- Als Antwort vorgeschlagen David Roller Donnerstag, 1. Dezember 2016 20:04
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 24. März 2017 10:52
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 -
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.
- Als Antwort vorgeschlagen David Roller Donnerstag, 1. Dezember 2016 20:04
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 24. März 2017 10:52
-
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
- Bearbeitet David Roller Sonntag, 5. Juni 2016 08:42