Programm hat zu viel Speicherauslastung ... Lösung ?
-
CListCtrl?
füllst du das ding immer weiter auf mit datensätzen... dann wundert mich auch nciht warum der speicherbedarf zunimmt... oder löscht du die alten einträge wieder wenn die liste zu gross wird?
-
Ne, wir reden hier von 9.000KB ( Im Taskmanager steht zwar nur ein 'K', aber ich denke das ist das gleiche)
Er macht leider konstant weiter...
Danke
HiJacker
-
BTW: Vielleicht wäre die Verwendung des ?-Operators in deinem Quelltext angebracht.
Immerhin hast du 2 fast identische Fallbehandlungen...
-
Windalf schrieb:
füllst du das ding immer weiter auf mit datensätzen
Naja, kommt drauf an. Der User des Programms kann entscheiden ob er neue Einträge im ListCtrl machen möchte oder ob er welche löschen möchte...
SeppSchrott schrieb:
Vielleicht wäre die Verwendung des ?-Operators in deinem Quelltext angebracht.
Immerhin hast du 2 fast identische Fallbehandlungen...Verstehe nicht ganz was du meinst ... -> ?-Operator ???
Danke
HiJacker
-
Also meiner Meinung nach, sind die 9MB noch unkritisch.
Das ist eben der Adressraum, der deinem Programm zugesprochen wird.
Der ist oft sehr großzügig bemessen von Windows und wird nach oben korrigiert, wenn dein Programm oft Speicher reserviert.
Vielleicht hast du aber wirklich irgendwo ein Leck.Dann wärs vielleicht sinnvoll, du lässt es wirklich mal etwas länger laufen...
Also bei ~50 MB darfst du dann Alarm geben
-
HiJacker schrieb:
Verstehe nicht ganz was du meinst ... -> ?-Operator ???
pItem.iImage = m_imageList.Add(hIcon[(pList->GetCheck(i)) ? 0 : 1]);
Wenn ich das richtig sehe ist, das der einzige Unterschied.
Den Rest brauchst du nur einmal.
-
SeppSchrott schrieb:
Also bei ~50 MB darfst du dann Alarm geben
Hmm, doch leider habe ich schon die Erfahrung gemacht das ein Programm schon ab ca. 26MB - 30MB abstürtzt. Passiert mir oft wenn ich eine Instanz des IE's für längere Zeit offen habe. Dann löscht sich die IE-Seite nach ca 6 Stunden automatisch und liegt dann meistens zwischen 24 - 30 MB ...
Und wenn mein Programm weiter so macht, dann ist es bald auch dem Absturz nahe...
SeppSchrott schrieb:
pItem.iImage = m_imageList.Add(hIcon[(pList->GetCheck(i)) ? 0 : 1]);
Danke, werd ich mal testen...
Danke
HiJacker
-
Ohne jetzt zu wissen warum und was dein Programm macht hast du hier einen kompletten Designfehler.
Ein ListCtrl macht nichts alleine.
Wozu überprüfst du dann jede sekunde ob sich da was ändert.CListCtrl sendet, genauso wie alle anderen Controls, Nachrichten wenn sich was ändert.
Ändere mal auf das und dann sehen wir weiter wo es noch hackt.
-
Du solltest evtl. dafür ne Klasse von CListCtrl ableiten, und dort
dann die dinge die du brauchst für das ListCtrl implementieren.Devil
-
Unix-Tom schrieb:
CListCtrl sendet, genauso wie alle anderen Controls, Nachrichten wenn sich was ändert.
Wäre keine schlechte Idee einfach die Messages abzufangen und dann alles zu speichern. Doch gibt es eine Message die Zurückgibt ob eine Checkbox angeklickt wurde ? Mit NM_CLICK geht das nicht ...
Devil schrieb:
Du solltest evtl. dafür ne Klasse von CListCtrl ableiten, und dort
dann die dinge die du brauchst für das ListCtrl implementieren.Wenn ich mit den Messages arbeite, werde ich das mal machen...
Danke
HiJacker
-
Klar gibt es eine. NM_CLICK.
Warum sollte das nicht gehen. Das Feld wird in jedem Fall geändert.
SOmit brauchst du nur den selektieren Eintrag nehmen und damit machen was du willst.
-
Naja, NM_CLICK wird ja nur aufgerufen wenn man ein Item anklickt. Doch wenn man eine Checkbox anklickt dann wird leider nciht das ganze Item selektiert ...
Sonst wäre es ja kein Problem ...habe jetzt mal versucht
pItem.iImage = m_imageList.Add(hIcon[(pList->GetCheck(i)) ? 0 : 1]);
zu verwenden, leider steigt die Speicherauslastung immer weiter. Zwar diesmal nicht so schnell, aber dafür in 10-Schritten....Das muss auf jedenfall an dem Timer liegen. Würde es eine Message für das anklicken einer Checkbox geben, dann würde ich es so machen...
Danke
HiJacker