Speicherauslastung bei OpenURL



  • Hallo,
    mir werden zwar keine MemoryLeaks angezeigt aber dennoch steigt die Speicherauslastung kontinuierlich, wenn ich Quellcode von einer Website abrufe.

    Woran kann das liegen?

    Hier der Code:

    CInternetSession m_session;
    		CStdioFile *m_pfile;
    
    		//#if 0
    		m_pfile = m_session.OpenURL("http://www.xyz.com");
    		if (m_pfile != NULL)
    		{
    		m_pfile->Close();
    		delete m_pfile;
    		}
    		m_session.Close();
    		//#endif
    

    Die Funtkion rufe ich in einer Endlosschleife immer wieder auf und beobachte die Speicherauslastung.

    Grüße,
    Michael

    P.S.: Die Endlosschleife ist nur drin um die Entwicklung der Speicherauslastung zu beobachten und hat mit dem eigentlichen Programm nichts zu tun.


  • Mod

    Das nachfolgende Programm zeigt kein Leak und keinen steigenden Speicherbedarf!

    // InternetSessionLeak.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <afxinet.h>
    #include "InternetSessionLeak.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    // The one and only application object
    
    CWinApp theApp;
    
    using namespace std;
    
    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    	int nRetCode = 0;
    
    	// initialize MFC and print and error on failure
    	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    	{
    		// TODO: change error code to suit your needs
    		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
    		nRetCode = 1;
    	}
    	else
    	{
    		CInternetSession m_session;
    		CStdioFile *m_pfile;
    
    		for (int i=0; i<100000; ++i)
    		{
    			m_pfile = m_session.OpenURL(_T("http://www.grutzeck.de"));
    			if (m_pfile != NULL)
    			{
    				m_pfile->Close();
    				delete m_pfile;
    			}
    			fprintf(stdout,"%5d\n",i+1);
    		}
    		m_session.Close();
    	}
    
    	return nRetCode;
    }
    


  • Hallo und vielen Dank für deine Mühe!

    Wenn ich deinen Code ausführe, zeigt der TaskManager das Folgende an:
    Beim Start der Anwendung: 4.708K (Ich habe den Code in eine größere Anwendung eingebunden)
    Beim Start der Funktion: 8.876K
    Nach 800 Aufrufen deiner HP: 10.504K

    Die 2.000K sind natürlich nicht die Welt aber mein Prog ruft ca. 12 Std. am Tag permanent Daten ab und da kommt man dann am Ende auf ca. 90.000K

    Fällt dir dazu noch was ein?

    Grüße,
    Michael

    P.S.: Ich benutze Win XP v5.1 Service Pack 2 und Visual C++ 6.0



  • Michael H. schrieb:

    P.S.: Ich benutze Win XP v5.1 Service Pack 2 und Visual C++ 6.0

    Ins Blaue: Hast du das VC6 SP6 drauf? Sonst hol das mal nach: http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/download/default.aspx 🙂


  • Mod

    1. Ich verwende VC-2005. VC6 gehört für mich eingestampft. Ich kann Dir nicht sagen ob dort drin etwas leaked. Gehörthabe ich davon jedoch nichts.
    2. Bist Du sicher, dass der Speicher Bedarf langsam ansteigt?

    CInternetSession lädt einen Haufen DLLs nach. Also soltest Du mindestens einen Aufruf abwarten bis alle DLLs in Benutzung sind. Dann könntest Du mit GetProcessWorkingSetSize prüfen ob sich wirklich etwas verändert.


Anmelden zum Antworten