GC will nicht



  • Hab kleines Programm, dass Werte auf Konsole schreibt. Hab Probleme mit Speicherleak/GC hat, der mein RAM frisst und Auslagerungsdatei zumüllt. Das Ganze endet dann in ner OutOfMemoryException.
    Hier eine Beispiel Klasse. Auch hier zeigt sich schon der ständige Speicheranstieg (schon bei wenig Code).
    Wie kann ich das verhindern ? Klasse ist doch __gc gekennzeichnet, da geht aber gar nix...

    #include "stdafx.h"
    
    #using <mscorlib.dll>
    
    using namespace System;
    
    __gc class Vektor {
    
    	private:
    		Double y, x, z;
    
    	public:
        Vektor() :
            y(0.),
            x(0.),
            z(0.)
        {}
    };
    int _tmain()
    {
        Vektor* vec = new Vektor();
        for (int i = 0; i < 1000000; i++) {
    
        Console::WriteLine(vec);
        //GC::Collect();
        }
    
    	return 0;
    }
    


  • Also bei mir verändert sich da am Speicher überhaupt nix... der GC räumt den Speicher selber auf, wenn er nicht mehr gebraucht wird. Du musst nur darauf achten, dass Du nicht ständig Objekte in eine Liste/Array stopfst...



  • Hm, bei mir ändert es sich schon. Ist halt Minimalbeispiel.
    Bei meinem Programm geht er zügig mit 10MB Schritten hoch, kann sogar mit GC::Collect() das Ganze nur verlangsamen.



  • VC wieviel? 7.1? Kann es absolut nicht nachvollziehen...
    Der virtuelle Speicher (nur der ist relevant) ist bei mir ständig bei 4,7 MB.



  • JA VC 7.1. Ich schau mal nach besserem Beispiel.
    [edit]
    Hm, hast recht. Dann muss ich das Leck an anderer Stelle suchen...
    Was zeigt dann die Spalte "Speicherauslastung" an, die geht nämlich kontinuierlich hoch ?



  • Nicht nach einen besseren, sondern nach einem, dass andere auch nachvollziehen können 😉



  • Konnte den Fehler eingrenzen. Liegt wohl an .NET Remoting; das muss ich mir mal genauer anschauen. Also Thread kann geschlossen werden... 🙂


Log in to reply