Anwendung verbraucht kontinuierlich RAM
-
Hi,
ich habe folgendes Problem, meine Anwendung verbraucht kontinuierlich RAM. Diese Anwendung wird über Sockets von anderen Anwendungen angesprochen und führt dann bestimmte aufgaben durch (greift auch auf MySQL DB zu).
Ich habe genaustes überprüft dass ich alle new’s auch delete [].Die Anwendung wächst um ca. 10 MB in 24 Std. bei 20-30 Socket zugriffen in der Stunde. Wenn ich die Anwendung minimiere und dann wieder maximiere ist der Speicher wieder frei. Kann es sein das der Task-manager den Großen Speicher Verbrauch anzeigt, der Speicher aber trotzdem teilweise zur Verfügung steht?
Ich habe keine Ahnung an welcher stelle der Speicher noch reserviert wird ohne nach dem Verlust der Gültigkeit den Speicher wieder frei zu geben. Was für einen Grund kann es noch geben. Gibt es vielleicht irgendwelche Analyse Tools die solche Stellen im Code finden?Info: BS Win XP
Visual C++ Standard
MFC Anwendung (Dialogbasierend)
RAM Info über Task-managerFür die Antwort bedanke ich mich im Voraus
Gruß Olaf
-
benutzt du für den datenbankzugriff odbc?
wenn ja hol dir die neuesten treiber... die älteren produziern speicherleckskannst es auch einfach testen indem du mal n haufen datenbankzugriffe ausführst und schaust ob der speicher hochläuft
-
Ersteinmahl danke für die schnelle Antwort. Ich benutze bereits das aktuelle „current production release“ MyODBC 3.51.06. Die Anwendung greift bei jedem „Job“, den die Anwendung über den Socket kriegt auf die DB zu aber nicht immer wächst der Speicher. Es kann vielleicht sein, dass der Speicher nicht wächst weil mehrere Zugriffe auf die MySQL DB identisch sind und ich auf die Version 3.52 warten muss(bis sie ausgereift ist). Falls du, oder noch jemand eine Idee hat, währe ich für Anregungen aller art dankbar.
Gruß Olaf
-
mach ne endlosschleife mit datenbankzugriffen, dann siehst du ja obs daran liegt
-
Ich hatte bis vor zwei Monaten noch das selbe Problem. Speicherverbrauch war
wahnsinnig hoch. Die Zugriffe wurden direkt per ODBC Api gemacht. Es war aber
keine MySQl Datenbank. Ich hatte mir dann die neusten Treiber gezogen und damit
war der Verbrauch ein bißchen niedriger. Mein Programm hat die Tabellen aus einer
Datenbank über ODBC geholt und in eine Access Datenbank geschrieben. Irgendwann
bin ich dann im Netz darauf gestoßen das MDAC 2.7 von MS einen Speicherfehler hat.
Nach einem Update auf 2.8 war das Problem behoben. Wenn du über die ODBC Api
zugreifst, dann schau dir mal genau an ob du alle Handles in der richtigen
Reihenfolge freigibst.
-
vielleicht hilft dir der boundschecker von noumega