Speichern von Daten über IPC



  • Ich habe ein Simulationsprogramm. Für dieses Programm kann kann man eigene DLL schreiben, mit denen ein Simulationsmodell nachgebildet werden kann. Jetzt habe ich das Problem, dass ich viele einzelne Messwerte in diesem Programm speichern muss(Vector). Das ist zwar möglich, leider dauert das Starten der Simulation sehr lange. Es sind ca 20000 Werte vom Typ double. float geht auch, double wird vom Programm vorgegeben.
    Ich möchte auf jedes Element einzeln zugreifen können, wie bei vector auch.
    Kann ich ein Speicherbereich definieren der während der Simulation erhalten bleibt, sodass diese Daten nicht mehr im Programm selbst gespeichert werden müssen. Ich erhoffe mir so eine erhebliche Geschwindigkeitssteigerung.
    Vielleicht so eine Art Shared Memory, bei dem nur ein Prozess zugreift.



  • Hat keiner eine Idee. Es reicht eigentlich eine struct. Ich muss halt nur auf die Werte einzeln zugreifen können.


  • Mod

    Was ist mit einer Memory Mapped File.

    Allerdings kannst Du dann keinen vector verwenden. Du müsstest das Datenkosntrukt so aufbauen, das keine Pointer drin vorkommen und die Daten wirklich so "roh" wieder verwertet werden können.



  • Das ist ja der Kniff an der Sache. Mit MemoryMapped File probier ich es. Aber mir fehlt der Zugriff auf die einzelnen Elemente. Ich kann im aufrufenden Programme keine Struktur hinterlegen, da der Aufruf lediglich über eine DLL geschieht.



  • Ich habe eine Idee, zum probieren hab ich zur Zeit keine Zeit. Deshalb die Frage an die Profis
    - Ich reserviere mit MemoryMappedFile ein Speicherbereich.
    Größe = AnzahlElemente * sizeof(double)
    - Ich setze ein Zeiger auf Anfang des Speicherbereiches und lese/schreibe per Offset in diesem Bereich

    Dann kann ich per DLL ein Speicherbereich reservieren, der unabhängig ist vom aufrufenden Programm. Der Inhalt kann aber vom aufrufenden Programm gelesen werden.

    Geht das?


  • Mod

    etsmart schrieb:

    Ich habe eine Idee, zum probieren hab ich zur Zeit keine Zeit. Deshalb die Frage an die Profis
    - Ich reserviere mit MemoryMappedFile ein Speicherbereich.
    Größe = AnzahlElemente * sizeof(double)
    - Ich setze ein Zeiger auf Anfang des Speicherbereiches und lese/schreibe per Offset in diesem Bereich

    Dann kann ich per DLL ein Speicherbereich reservieren, der unabhängig ist vom aufrufenden Programm. Der Inhalt kann aber vom aufrufenden Programm gelesen werden.

    Was meinst Du damit?
    Eine Memory Mapped File ist eine Speicherbereich. Diese "File" kann sich jeder Prozess öffnen der Rechte dazu hat.


Anmelden zum Antworten