Mehrere Anwendungen, gleiche Daten

Thomasio

Erfahrenes Mitglied
Ich habe ein halbes Dutzend Anwendungen, die zum Teil dieselben Daten verwenden.
Bei jeder Änderung werden die Daten via Messages weitergegeben.
So weit so gut.
Problem ist nur, dass das im Laufe der Zeit recht viele Daten geworden sind, und wenn jede Anwendung eine Kopie der Daten im Speicher behält, dann habe ich ein Vielfaches an Speicherbedarf.

Probiert habe ich als Erstes das Ganze über eine Datei zu lösen, in der die Daten stehen, geschrieben und gelesen werden, aber dazu muss ich immer alle Daten schreiben, structs zu Text konvertieren, usw., sprich umständlich, ausserdem ist Dateizugriff deutlich langsamer als Speicherzugriff.

Eine .dll kann zwar von mehreren Anwendungen verwendet werden, könnte struct und vector<struct> enthalten, nur leider teilen sich die Anwendungen nur die Funktionen aus der .dll, nicht die Daten.

In kurz:
Gibt es eine einfache Möglichkeit einen (oder mehrere) vector<struct> irgendwo im Speicher zu haben, auf den mehrere Anwendungen (mit Mutex) zugreifen können?
 
Shared Memory, oder auch memory mapped files ist zwar schneller als Dateizugriff, hat aber immer noch das Problem, dass ich structs zu Text und zurück konvertieren muss (auch mit Boost).

Ich gebe die Anwendungen auch weiter, und ich habe keine Lust meinen Usern zu erklären, dass sie alle eine DB auf ihrem Rechner installieren sollen, mal abgesehen davon, dass ich einen vector<struct> nicht ohne Konvertierung in einer DB speichern kann.

An der Stelle kommt immer meine eigenwillige Lösung, mit der ich mir selber beweise, dass es eigentlich machbar sein müsste.
Ich schreibe einfach NOCH EINE Anwendung, in der die Daten samt zugehöriger Funktionen stehen und via Messages mit den anderen Anwendungen geteilt werden.
Blöd daran ist, dass das nur mit COPYDATA machbar ist, was nur als SendMessage() funktioniert, sprich aller Datentransfer muss von der Datenquelle ausgehen, Anforderung von Daten mit Rückgabe, oder direkter Zugriff auf die Daten ist nicht möglich.
 
Zuletzt bearbeitet:
Ich gebe die Anwendungen auch weiter, und ich habe keine Lust meinen Usern zu erklären, dass sie alle eine DB auf ihrem Rechner installieren sollen, mal abgesehen davon, dass ich einen vector<struct> nicht ohne Konvertierung in einer DB speichern kann.
Wie wäre es mit SQLite?
Das DBMS kannst du als DLL mitgeben oder direkt in deine EXE einbinden.
Und die Daten werden als *.sqlite-Datei gespeichert.
 
Der Absatz über vectors in shared memory war mir bisher entgangen, den muss ich mir umgehend zu Gemüte führen.

Auf jeden Fall vielen Dank für die rege Beteiligung.
 

Neue Beiträge

Zurück