|
|
Optionale Speicherung von Klassen inkl. Dependent Properties |
|
matlabix |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 19.01.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015-b
|
|
|
|
|
|
Verfasst am: 24.03.2016, 11:04
Titel: Optionale Speicherung von Klassen inkl. Dependent Properties
|
|
|
|
|
Guten Tag an Alle,
leider bin ich kein Informatiker und bekomme die Informationen aus diversen Threds, MatLab-Dokus und eigenen Versuchen mitlerweile nicht mehr sortiert und bitte deswegen um Hilfe:
Ausgangssituation:
Ich bastel mir ein OOP Auswertungstool von Zeitreihen. Dabei manipuliere und verrechne ich Daten zweier Jahre, die an ca. 300 Datenquellen erhoben wurden und zeitlich aufgelöst sind. Das Programm ist so ausgelegt, dass eine effiziente, individuelle Berichterstellung ermöglicht wird. Das erreiche ich gegenwärtig über eine große Anzahl von Dependent-Properties, die ja nur auf Anfrage berechnet werden. Das klappt bislang auch ausgeprochen gut.
Mein Problem:
Beim Prototyping werden die Testzeiten neuer, übergeordneter Klassen unerträglich lang. Mit übergeordnem Klassen meine ich Klassen, die aus diversen, konkret instanzierten Objekten Properties weiter nutzt um somit die Daten weiter zu verdichten - keine Super-, bzw. Elternklassen!
Meine Idee:
Ich würde gerne mit den "fertigen" Klassen bereits eine Vorberechnung starten und das gesamte, instanzierte Objekt inkl. aller durch das Objekt aufgerufener Objekte speichern, sodass ich zum Prototyping auf die gespeicherten Objekt zugreifen kann.
[b]Woran ich hänge:[/b]
- Bei einer simplen Speicherung von Objekten (z. B. durch save('bla.mat','objekt') ) werden leider keine Dependent-Properties gespeichert, somit habe ich leider nix gewonnen.
- Es scheint die Möglichkeit zu geben in jeder Klasse eine "saveobj" - "loadobj" -Mehtode zu implementieren. Allerdings wird mir der Sinn noch nicht wirklich klar...
- Das zu speichernde Objekt als Struct speichern. Allerdings verliere ich dabei die im Objekt aufgerufenen Fremdobjekte...
- Ein Verlust der "Berechnung-On-Demant" Funktion des Programms durch eine simple umdeklaration der Properties ist keine wirkliche Option
Was die Lösung sein könnte:
Ich habe das Gefühl, dass durch die saveobj-Methode in jeder Klasse eine individuelle Speicherung der Klasse ermöglicht wird. Vermutlich muss ich für meinen Fall eine jeweilige Speicherung als Struct vornehmen (bei vererbten Klassen kann man die ja irgendwie zu einergemeinsamen .mat Datei zusammenführen).
HAT JEMAND IDEEN, WIE ICH DA ZU EINER LÖSUNG KOMME?
Ein Code-Beispiel habe ich mir bislang gespart, weil ich glaube, dass ich eher ein Verständnissproblem habe. Sollte das mit Code aber verständlich sein, reiche gerne einen vereinfachten nach.
Schon mal vielen Dank für eure Hilfe und dran denken: Der dümmste Programmierer hat die dicksten Programme! (Meins ist riesig!)
Schöne Ostern!
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 24.03.2016, 15:25
Titel: Re: Optionale Speicherung von Klassen inkl. Dependent Proper
|
|
Hallo matlabix,
OOP in Matlab ist nicht für High-Perfomance-Computing gedacht. Aber was bedeutet "unerträglich lange"? Müssen die Daten in Echtzeit bearbeitet werden und es geht um Millisekunden? Oder legst Du nach dem Programmstart erstmal eine Kaffeepause ein?
Wo wird die Zeit genau verbracht? Was sagt der Profiler dazu? Vielleicht hast Du ja nur irgendwo eine Pre-allocation vergessen und das Erstellen harmloser Arrays geschieht mit iterativem Wachstum, was enorm viele Resourcen vergeudet.
Was genau bedeutet "riesig"? Manche User sind von Programmen mit 10'000 Zeilen schon beeindruckt, andere finden alles unterhalb von 200'000 Zeilen noch gut überschaubar.
Gruß, Jan
|
|
|
matlabix |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 19.01.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015-b
|
|
|
|
|
|
Verfasst am: 24.03.2016, 16:00
Titel:
|
|
|
|
|
Hey Jan,
danke für die fixe Antwort!
Das mit dem "riesig" sollte selbstironisch meinen, dass ich mir ohne weiteres (bei gleicher Funktion) einige Zeilen Code sparen könnte...
nun zum wichtigen:
Es kommt bei dem Programm, sobald es denn fertig ist, nicht direkt auf die Geschweindigkeit an. Selbst wenn es eine Woche lang im Hintergrund läuft, wäre das kein Problem.
Was nach meiner Analyse sehr lange dauert, ist das extrahieren der Daten aus einer SQL-Datenbank und die Zeitreihenverrechnung (Synchronisierung der nicht äquidistanten Zeitreihen über MatLab-timeseries-Objekte, Filterung, Grenzwertkontrollen etc.). Besagte Zeitreihenverrechnungen treten derart häufig auf, dass ich ohnehin nur noch von Berechnungen "über Nacht" ausgehe. Und genau das ist mein Problem. Ich würde mir gerne z. B. ein Skript schreiben, dass mir einige Objekte inzanziert, "vorberechnet" und speichert, sodass ich am Folgetag nur noch mit gespeicherten Daten der benötigten ca. 240 Objekten arbeite.
Mein Problem ist der Punkt SPEICHERN der Objekte inkl. der "Dependent-Poperties"... einfach nur das Objekt speichern hilf mir da ja leider nicht ernsthaft weiter.
Und du hast recht, mit C++ wäre ich besser beraten... Wäre ich nur Informatiker.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.03.2016, 16:31
Titel:
|
|
Hallo,
dependent - Properties werden nie abgespeichert, auch nicht wenn die Objekte im Workspace sind. Es wird bei jeder Abfrage (also z.B. auch bei der Anzeige im Command Window) die get-Methode aufgerufen. Warum sollte die Information also mit gespeichert werden, wenn sie ohnehin neu ausgewertet wird?
Wenn du die Eigenschaften abspeichern willst, dann stellt sich mir die Frage: warum müssen sie dependent sein?
Grüße,
Harald
|
|
|
matlabix |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 19.01.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015-b
|
|
|
|
|
|
Verfasst am: 24.03.2016, 16:48
Titel:
|
|
|
|
|
Hey Harald,
genau das ist das Problem: Wenn das Programm fertig ist, interessiert nur der auswertende Plot ganz bestimmter Variablen, die sich der Anwender aussuchen kann. Über den Aufbau mit get-Methoden wird also immer nur das absolut notwendige berechnet.
Bei meinem Weg dahin werde ich allerdings noch einige Test laufen lassen müssen, für die ich noch nicht weiß, welche Variablen wichtig sind. Und wie du schon sagst, ist die Berechnung über die jeweilige get-Methode bei jedem Aufruf der dependent properties (Attribute heißt das oder?) notwendig. Das führt dann direkt zu einer Stunde oder mehr Pause, was bei mehreren Tests, insbesondere im letzten Test-Schritt, der graphischen Darstellung ziemlich inakzeptabel ist.
Ich suche jetzt nach einer Möglichkeit das Programm an sich, sprich die get-Methoden, für die Testzwecke nicht ändern zu müssen, mir aber die ewige Neuberechnung zu sparen. -> mehr Tests möglich -> besseres Endergebnis.
Danke an dieser Stelle schon mal für das Interesse an diesem Thread
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.03.2016, 20:43
Titel:
|
|
Hallo,
mit anderen Worten, der gleiche Code soll sich einmal so und einmal anders verhalten? Das dürfte schwierig werden.
Man könnte in den get-Methoden höchstens etwas einbauen wie eine interne Abfrage:
Grüße,
Harald
|
|
|
matlabix |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 19.01.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015-b
|
|
|
|
|
|
Verfasst am: 29.03.2016, 08:35
Titel:
|
|
Hey Harald,
das wäre in der Tat eine Variante. Ansonsten muss ich mir die Variablen, die ich speichern möchte, per zusätzlichem Skript rausholen. Ich werde mich aber nochmal dahinterklemmen, was das mit dem override der save-Funktion in den einzelnen Objekten auf sich hat. Es muss irgendwie eine elegantere Variante geben...
Besten Dank nochmal!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|