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-manager

    Fü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 speicherlecks

    kannst 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


Anmelden zum Antworten