Http Anfrage und sehr höhe Speicherauslastung
-
hallo,
ich verwende CB5 und mache mit Hilfe THttpClient eine Httpanfrage und bekomme auch ordentliche Antworten vom Server. Leider wächst die Speicherauslastung rasant schnell(ich sehe es im Taskmanager). So habe ich mit Hilfe CodeGuard überprüft, leider finde keinen Speicherlecks. Sonst habe ich aber Recvd_Stream immer gelöscht. Ich weiss nicht, was ich noch da leeren oder freigeben muss.
Es ist aber meine starke Vermutung, dass es daran liegen sollte. aber es könnte das Problem auch wo anderes liegen, nun konnte ich nicht feststellen.
für jede Hilfe, bin ich sehr dankbar...vielen dank
Marek
-
Zeige mal deinen Code.
-
audacia schrieb:
Zeige mal deinen Code.
inzwischen habe ich gefunden, wo der Fehler ist. Am Anfang habe ich die Stelle falsch geschätzt. Der Fehler steckt darin, dass TNativeXml den Speicher nicht freigibt.
Das wäre schön, wenn du mir sagen könntest, warum es nicht freigibt. hier ist der Code dafür:
try { if (FileExists(FileName)) // FileName ist übergeben { if(xmlFplan ==NULL) xmlFplan = new TNativeXml(); xmlFplan-> LoadFromFile(FileName); if (parseXml.checkForRoot(xmlFplan)) { TXmlNode* root = xmlFplan->Root; TXmlNode* Knoten = root->NodeByName(STBRes); if (Knoten != NULL) { if (jourListe == NULL) jourListe = new TXmlNodeList(); Knoten->NodesByName(JourneyList, jourListe ); for (int i = 0; i < jourListe ->Count; i++ ) { Knoten = journeyListe->Items[i]; if (allSTB== NULL) allSTB= new TXmlNodeList(); Knoten->NodesByName(STBJourney, allSTB); for (int i = 0 ; i < allSTB->Count; i++ ) { if (FahrplanDaten == NULL) planDaten = new g_D_PlanDaten(); Knoten = allSTBJourney->Items[i]; AnsiString tmpZusehen = Knoten->WriteToString(); parseXml.holeFahrPlan(Knoten, planDaten ); // if (Gefunden && FormMain->M_GetModulVorh(Station)) if (FahrplanDaten != NULL) { // an dieser Station ein Modul vorhanden if (FL_GetElem(*planDaten) == NULL) // Element noch nicht enthalten { FL_Insert( *planDaten); } } if (planDaten != NULL) { delete planDaten; planDatenn = NULL; } } // Ende for (int i = 0 ; i < allSTBJourney->Count; i++ ) if (allSTB!= NULL) { delete allSTB; allSTB=NULL; } } // Ende for (int i = 0; i < journeyListe->Count; i++ ) if (jourListe != NULL) { delete jourListe ; jourListe = NULL; } // keine von den Varianten funktioniert hier.. [b] [u] // xmlFplan->Free(); // xmlFplan = NULL; if (xmlFplan!= NULL) { xmlFplan->Clear(); delete xmlFplan ; xmlFplan = NULL; }[/u][/b] } // Ende if (Knoten != NULL) } // Ende if (parseFahrPlan->checkForRoot(xmlFplan)) } // Ende if (FileExists(FileName)) } // Try catch (Exception &E) { g_V_LogFkt.L_Eintrag("!!! Exception: " + AnsiString(__FILE__) + " -> " + AnsiString(__FUNC__) + ", Text folgt:"); g_V_LogFkt.L_Eintrag(E.Message.c_str()); if (jourListe != NULL) { delete jourListe ; jourListe = NULL; } if (xmlFplan!= NULL) { xmlFplan->Clear(); delete xmlFplan ; xmlFplan = NULL; } if (allSTB!= NULL) { delete allSTB; allSTB=NULL; } if ( planDaten != NULL) { delete FahrplanDaten; FahrplanDaten = NULL; } } }
-
Von RAII hast du auch noch nichts gehört, oder?
Du solltest lieber std::auto_ptr<> (Google hilft) für deine Zeiger benutzen, dann mußt du sie nicht von Hand freigeben und kannst auch nicht so einfach Speicherlecks bauen.
-
leider das hat nicht geholfen. TNativeXml macht was er will
.....
andere möglichkeiten für Speicherfreigabe bei TNativexml?
-
burkut schrieb:
leider das hat nicht geholfen. TNativeXml macht was er will
.....
Was hast du denn gemacht? Wie sieht dein Code jetzt aus?