tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
1122
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Apr 2004
    Ort
    schweiz
    Beiträge
    618
    Hey Freaks look at me, Autogramme Vis à vis *sing*

    Guten Morgen, ihr geekigen geeks

    So da ich mein Projekt nun Fertig habe, bin ich gerade an Performance Optimierung,Kommentierung etc. Von meinen Java Zeiten kenn ich nocht, dass ich Neu instanzierte Objekte wieder auf null setzen musste, damit Sie auch nicht zu lange in meine Code rumtrudeln, und meine Memory-Performance auch nicht in das Unendliche schwingt Bei c# bin ich mir jedoch nicht so sicher(bin halt immer noch n nichtsnütziger Anfänger ) und habs auch gar nicht gemacht, weiss auch nicht wiso . Nun die Frage, ist das hier das selbe Prinzip, oder ist das bei .NET nicht mehr nötig? (frwk 1.1)

    Und noch ne kleine Anhang-Frage: Arbeitet einer von euch mit SourceSafe?

    Normal kann ich ja Source-Infos einbinden indem ich zB:
    Code :
    1
    
    $Archive:$
    In meinen ModulKopf schreibe. Also c++ ist es auf jedenfall so. Muss ich bei c# noch irgend was anders machen? Denn momentan tut sich da gar nix

    So, das sollte für die morgige Stund mit dem batzen Gold im Mund reichen

    mfg
    ziop
     
    ~~Be water my friend~~ by bruce
    ~~Der einfachste Weg, bietet die schwerste Lösungssuche~~ by emkey
    *****************************
    (\_/)
    (O.o) This is Bunny. Copy Bunny into your signature
    (> <) to help him on his way to world domination

    .:Blödeleienschreiber des 1. offiziellen Sven Uwe Fan-Clubs:.

    -------------------------------------------------------------------------------------

    Mir sche*** egal wer dein Vater ist!! Wenn ich fische geht keiner übers Wasser!

  2. #2
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Garbage Collection unter C# sieht im Prinzip folgendermaßen aus:

    Der GC wird meist dann angetriggert, wenn der Heap-Speicher aufgebraucht sprich voll ist, manuell gestartet wird, oder wenn ein anderes Programm mehr Speicher benötigt, als aktuell noch frei ist.

    Der GC iteriert durch den Heap und markiert zuerst jedes Objekt als Garbage, also setzt es auf "zu verwerfen". Danach wird nochmals jedes Objekt rekursiv überprüft, ob Referenzen darauf zeigen - es also noch benutzt wird. Jedes Mal, wenn ein Objekt vom Garbage Collector besucht wird, wird es als erreichbar markiert. Nach diesem Durchlauf steht nun fest, welche Objekte erreichbar sind und welche nicht. Zyklische Referenzen (also Objekt A referenziert Objekt B, welches Objekt C referenziert, welches wiederum Objekt A referenziert) werden ebenfalls entsprechend behandelt.

    Im nächsten Schritt wird der Managed Heap durchlaufen und dieser kompaktiert. Das bedeutet, dass Objekte, die verworfen werden können durch Objekte, die im Heap weiter oben gelagert sind überschrieben werden. Dadurch verkleinert sich der Heap und benötigte Objekte wandern weiter nach unten. Es entstehen also keine "Löcher" Heap (Fragmentierung). Dadurch müssen natürlich auch alle Referenzen vom GC geändert werden. Dies ist natürlich ein aufwändiges Unterfangen und aus diesem Grund sollte der GC manuell nur aufgerufen werden, wenn dies unbedingt notwendig ist.

    Wann werden Objekte nicht mehr benötigt? Beispielsweise werden in einer Methode unterschiedliche Objekte instanziert. Wurde diese Methode durchlaufen, werden diese Objekte natürlich nicht mehr benötigt und werden beim nächsten Durchlauf des GC entsprechend behandelt. Sie müssen also nicht explizit auf null gestellt werden. Anders verhält es sich bei Objekten, die "expensive resources" (Dateien, Socket-Verbindungen, Ports, Daten Strukturen etc.) enthalten. Hier bietet .NET die object finalization an. Werden also Verbindungen etc. benutzt sollte eine Methode Finalize() vorhanden sein. Diese wird bei der Freigabe des Objektes aufgerufen und somit können verwendete Resourcen auch entsprechend behandelt bzw. tatsächlich freigegeben werden. Hier ist zu beachten, dass die Finalize()-Methode der Basisklasse auch aufgerufen wird. Weiters immer einen try-catch-Block darum ziehen.

    Eine weitere Möglichkeit besteht durch das Dispose()-Pattern. Hier ist eine Methode Dispose() zu implementieren. Durch den Aufruf von Dispose werden alle teuren Resourcen entsprechend freigegeben - wie auch in der Finalize()-Methode muss hier der Code für die Freigabe der Ressourcen manuell eingetragen werden. Die Ressourcen werden durch diesen Aufruf sofort freigegeben - ausser man wartet auf den Garbage Collector.

    Die schönere Variante besteht darin, das IDisposable()-Interface zu implementieren. Dadurch wird die Methode Dispose() vorgeschrieben und muss entsprechend implementiert werden.

    Natürlich gäbe es an dieser Stelle noch mehr zu sagen, aber das sollte als kurzer Überblick durchaus reichen.
     

  3. #3
    Registriert seit
    Apr 2004
    Ort
    schweiz
    Beiträge
    618
    Jo, danke Norbert!

    Ich lass den Thread noch offen, vielleicht weiss noch einer was zu meinem SourceSafe "Problem"

    Schönen Tag vorerst einmal
     
    ~~Be water my friend~~ by bruce
    ~~Der einfachste Weg, bietet die schwerste Lösungssuche~~ by emkey
    *****************************
    (\_/)
    (O.o) This is Bunny. Copy Bunny into your signature
    (> <) to help him on his way to world domination

    .:Blödeleienschreiber des 1. offiziellen Sven Uwe Fan-Clubs:.

    -------------------------------------------------------------------------------------

    Mir sche*** egal wer dein Vater ist!! Wenn ich fische geht keiner übers Wasser!

Ähnliche Themen

  1. [vb] Uniprocessor-System Garbage Collection
    Von Raabun im Forum .NET Café
    Antworten: 1
    Letzter Beitrag: 19.03.09, 12:09
  2. [C#] Dispose und Garbage Collection
    Von Saber im Forum .NET Archiv
    Antworten: 12
    Letzter Beitrag: 01.03.09, 19:26
  3. Antworten: 0
    Letzter Beitrag: 15.12.06, 09:56
  4. Garbage-Collector!
    Von lernen.2007 im Forum Java
    Antworten: 2
    Letzter Beitrag: 28.12.05, 14:46
  5. Verschiedene JVM Flags zu Garbage Collection Tuning
    Von Thomas Darimont im Forum Java Technology News
    Antworten: 0
    Letzter Beitrag: 27.11.05, 23:45