WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Stetig abnehmende Performance, Ursachen unbekannt

 

eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 11.08.2010, 13:10     Titel: Stetig abnehmende Performance, Ursachen unbekannt
  Antworten mit Zitat      
Hallo,

Und zwar habe ich ein relativ umfangreiches GUI geschrieben, das MetaDaten aus DICOM-Dateien ausliest und bearbeitet. Die Performance zu Beginn ist sehr gut, allerdings nimmt die Performance stetig ab, je länger ich mich in der GUI aufhalte.

Die DICOM Dateien öffne ich mit dicominfo.m (Image Processing Toolbox), die die MetaDaten anschließend in ein struct schreibt. Mein Programm verwendet einige Parameter dieser struct und plottet diese beispielsweise.
Bevor ich in der GUI eine neue DICOM Datei einlese, wird der aktuelle Workspace mit clear gelöscht.

Trotz clear wird das Programm zunehmend langsamer, bis hin zur völligen Unbrauchbarkeit. Ich muss dann MATLAB neu starten, damit der Speicher wieder freigegeben wird. Dabei habe ich 4 GB RAM und die DICOM Dateien die ich damit öffne liegen in der Größenordnung von 100 kB.

- Welche Möglichkeiten habe ich, die Ursachen für diese Speicherplatzallokierung zu finden?
- Ist eventuell eine Art fclose auch für DICOM Dateien notwendig?
- Wenn ich Variablen überschreibe, wird dann der alte Wert im Speicher beibehalten? Dies könnte eine mögliche Ursache sein, weil ich die WindowButtonMotionFcn benutze, die bei jeder Mausbewegung 2 Variablen jeweils überschreibt.


Danke im Voraus & Grüße aus dem hessischen Marburg,
Daniel
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.08.2010, 14:06     Titel:
  Antworten mit Zitat      
Hallo Daniel,

verwende doch mal den PROFILEr, um hgeraus zu finden, in welchen Zeilen die Rechenzeit verbraten wird.
Code:
feature('memstats')

verät Dir etwas über den Speicher.
Es kann auch sehr viele Resourcen verbraten, wenn man sehr viele Objekte (AXES, LINE, PLOT, IMAGE) in Matlab zeichnet, ohne die alten (verdeckten?) Objekte wieder zu löschen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 11.08.2010, 14:29     Titel:
  Antworten mit Zitat      
Uhh, das kann gut sein. Wie lösche ich die denn?

Ich benutze derzeit nur "cla" vor jedem neuen Plot, ist das ausreichend?!
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2010, 14:35     Titel:
  Antworten mit Zitat      
Hallo,

meine Vermutung geht auch in die von Jan angedeutete Richtung.
Hatte bei einem GUI, bei dem ich Werte über die Zeit geplottet habe, das gleiche Problem. Zunächst war die Performance IO, mit fortlaufender Dauer wurde sie jedoch schlechter bis hin zum Programmabsturz. Die Lösung für mein Prop. war, die Daten (Lines) aus der Axes zu löschen, sobald ich diese nicht mehr benötigte (anzeigen musste).
Vielleicht hilft dir das ja weiter…

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2010, 14:47     Titel:
  Antworten mit Zitat      
Da war ich ein bisschen zu langsam... Wink
Habe meine Plote damals mit einer Schleife und
Code:

geschrieben, und die Werte die ich nicht mehr benötigte beispielsweise mit
Code:

delete(h(i-1000))
 

gelöscht.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.08.2010, 14:48     Titel:
  Antworten mit Zitat      
Hallo Eupho,

CLA löscht die die Objekt im aktuellen AXES Objekt. Wenn du aber jedesmal ein neues AXES-Objekt erstellst, wird das nicht helfen.
Sicherer wäre es, sich den Handle des AXES-Objektes zu merken und per "cla(AxesH, 'reset')" die Objekte zu löschen.
Code:
NumberOfAllObjects = length(findall(gcf));

zeigt Dir die Anzahl aller Objekte im aktuellen Fenster. Wenn dies dramatisch wächst, hast Du Deinen Zeitfresser gefunden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 11.08.2010, 15:15     Titel:
  Antworten mit Zitat      
Ursache möglicherweise gefunden:

Ich habe 2 axes und cla nur bei einer axes verwendet und nicht bei der leistungshungrigen mouseover axes. Das Problem scheint mit dem zweiten cla gelöst sein.

Vielen Dank für die Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.