5 Memory Leaks, die auch
in Ihrer .NET Anwendung
sein könnten
André Krämer
Softwareentwickler, Trainer, Berater
Danke, dass Sie alle gekommen sind!
Ich habe bereits beim Titel meiner Session gelogen!
5 Memory Leaks, die auch
in Ihrer .NET Anwendung
sein könnten
André Krämer
Softwareentwickler, Trainer, Berater
Klassisches Memory Leak
int *array = malloc(sizeof(int) * 100);
memset(array,0,sizeof(int) * 100);
// use the array
// fre...
Klassisches Memory Leak
int *array = malloc(sizeof(int) * 100);
memset(array,0,sizeof(int) * 100);
// use the array
// fre...
Bild: © iStock.com/matt_benoit
Bild: © iStock.com/eric1513
Wie funktioniert eigentlich der
Garbage Collector?
* Darstellung nicht 100 % korrekt, dafür aber verständlich ;-)
Der CLR garbage collector (GC) ist ein
“almost-concurrent, parallel,
compacting, mark-and-sweep,
generational, tracing GC”
?
Object
reference
Stack Heap
Mark: Lebende Objekte Identifizieren
• Ausgehend von einer Wurzel
• Statische Variable
• Lokal...
Object
reference
Stack Heap
Mark: Lebende Objekte Identifizieren
Object
reference
Stack Heap
Sweep: Tote Objekte freigeben
Object
reference
Stack Heap
Compact: Objekte zusammen führen
Mark – Sweep – Compact ist performancelastig
Gen 0 Gen 1 Gen 2
Generational Garbage Collection
(Gen 0 Collection: Start)
Gen 0 Gen 1 Gen 2
Generational Garbage Collection
(Gen 0 Collection: Ende)
Gen 0 Gen 1 Gen 2
Generational Garbage Collection
(Next Gen 0 Collection: Start)
Gen 0 Gen 1 Gen 2
Generational Garbage Collection
(Next Gen 0 Collection: Ende)
Gen 0 Gen 1 Gen 2
Generational Garbage Collection
(Gen 1 Collection: Start)
Gen 0 Gen 1 Gen 2
Generational Garbage Collection
(Next Gen 0 Collection: Start)
Gen 0 Gen 1 Gen 2
Generational Garbage Collection
(Next Gen 0 Collection: Ende)
Warum geht trotzdem noch
was schief?
a) Weil Ihr Kollege was falsch gemacht hat
Bild: © iStock.com/NinaMalyna
b) Weil Microsoft was falsch gemacht hat
Bild: © iStock.com/ThomasTroy
Wie finden wir unser Leak?
Besser: Ein Memory Profiler
Demo
Memoy Leaks unter
.NET finden
Source Code unter
http://github.com/AndreKraemer
Fazit
•Melden Sie Event Handler auf länger lebende
Objekte ab
•Meiden Sie statische Dictionaries als Cache
•Reduzieren Sie...
Homepage
andre@andrekraemer.de | http://andrekraemer.de | http://andrekraemer.de/blog | http://github.com/AndreKraemer
Vie...
Meine Dienstleistungen
• Schulungen
• ASP.NET
• Xamarin
• TX Text Control
• Infragistics NetAdvantage
• Team Foundation Se...
5 Memory Leaks, die auch in Ihrer .NET Anwendung sein könnten
Nächste SlideShare
Wird geladen in …5
×

5 Memory Leaks, die auch in Ihrer .NET Anwendung sein könnten

775 Aufrufe

Veröffentlicht am

.NET Entwickler unterliegen häufig dem Irrglauben, dass es unter .NET keine Memory Leaks mehr gibt. In diesem Vortrag erfahren Sie, wie der Garbage Collector arbeitet und sehen im verwiesenen Source Code unter http://github.com/AndreKraemer/MemoryLeakDemo auch entsprechende Beispiele

Veröffentlicht in: Software
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
775
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
215
Aktionen
Geteilt
0
Downloads
4
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • Ich habe mir 5 Beispiele aus meiner Praxis herausgesucht, bei denen ich als Berater gerufen wurde. Die werde ich gleich mit Ihnen durchgehen. Ich freue mich, wenn wir das ganze relativ interaktiv gestallten würden, Sie dürfen also gerne mitraten, wenn Sie glauben das Leak im Code entdeckt zu haben.

    Demo 1: Event Handler
    Demo 2: Static Dictionary als Cache
    Demo 3: Dynamic Assemblies
    Demo 4: DataBinding
    Demo 5: Disposable / Blocking Finazlizer
  • 5 Memory Leaks, die auch in Ihrer .NET Anwendung sein könnten

    1. 1. 5 Memory Leaks, die auch in Ihrer .NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater
    2. 2. Danke, dass Sie alle gekommen sind!
    3. 3. Ich habe bereits beim Titel meiner Session gelogen!
    4. 4. 5 Memory Leaks, die auch in Ihrer .NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater
    5. 5. Klassisches Memory Leak int *array = malloc(sizeof(int) * 100); memset(array,0,sizeof(int) * 100); // use the array // free(array) // ups, vergessen
    6. 6. Klassisches Memory Leak int *array = malloc(sizeof(int) * 100); memset(array,0,sizeof(int) * 100); // use the array // free(array) // ups, vergessen
    7. 7. Bild: © iStock.com/matt_benoit
    8. 8. Bild: © iStock.com/eric1513
    9. 9. Wie funktioniert eigentlich der Garbage Collector? * Darstellung nicht 100 % korrekt, dafür aber verständlich ;-)
    10. 10. Der CLR garbage collector (GC) ist ein “almost-concurrent, parallel, compacting, mark-and-sweep, generational, tracing GC”
    11. 11. ?
    12. 12. Object reference Stack Heap Mark: Lebende Objekte Identifizieren • Ausgehend von einer Wurzel • Statische Variable • Lokale Variable • Finalization Queue
    13. 13. Object reference Stack Heap Mark: Lebende Objekte Identifizieren
    14. 14. Object reference Stack Heap Sweep: Tote Objekte freigeben
    15. 15. Object reference Stack Heap Compact: Objekte zusammen führen
    16. 16. Mark – Sweep – Compact ist performancelastig
    17. 17. Gen 0 Gen 1 Gen 2 Generational Garbage Collection (Gen 0 Collection: Start)
    18. 18. Gen 0 Gen 1 Gen 2 Generational Garbage Collection (Gen 0 Collection: Ende)
    19. 19. Gen 0 Gen 1 Gen 2 Generational Garbage Collection (Next Gen 0 Collection: Start)
    20. 20. Gen 0 Gen 1 Gen 2 Generational Garbage Collection (Next Gen 0 Collection: Ende)
    21. 21. Gen 0 Gen 1 Gen 2 Generational Garbage Collection (Gen 1 Collection: Start)
    22. 22. Gen 0 Gen 1 Gen 2 Generational Garbage Collection (Next Gen 0 Collection: Start)
    23. 23. Gen 0 Gen 1 Gen 2 Generational Garbage Collection (Next Gen 0 Collection: Ende)
    24. 24. Warum geht trotzdem noch was schief?
    25. 25. a) Weil Ihr Kollege was falsch gemacht hat Bild: © iStock.com/NinaMalyna
    26. 26. b) Weil Microsoft was falsch gemacht hat Bild: © iStock.com/ThomasTroy
    27. 27. Wie finden wir unser Leak?
    28. 28. Besser: Ein Memory Profiler
    29. 29. Demo Memoy Leaks unter .NET finden Source Code unter http://github.com/AndreKraemer
    30. 30. Fazit •Melden Sie Event Handler auf länger lebende Objekte ab •Meiden Sie statische Dictionaries als Cache •Reduzieren Sie die Anzahl dynamisch generierter Assemblies durch Caching oder ähnliches •Implementieren Sie INotifyPropertyChanged wenn Sie Databinding nutzen •Blockieren Sie den Finalizer nicht!
    31. 31. Homepage andre@andrekraemer.de | http://andrekraemer.de | http://andrekraemer.de/blog | http://github.com/AndreKraemer Vielen Dank! Blog Xing Facebook Twitter Google+ 32 Vielen Dank an Ben Emmett von Redgate Software für die Unterstützung bei den Folien Sämtliche Abbildung wurden ordnungsgemäß bei IStockPhoto lizensiert.
    32. 32. Meine Dienstleistungen • Schulungen • ASP.NET • Xamarin • TX Text Control • Infragistics NetAdvantage • Team Foundation Server • Consulting • Durchführung von Technologieworkshops • Code- / Architekturreviews • Analyse von managed Memory Leaks • Prototypenentwicklung • Remote Entwickler-Support • Projektbegleitendes Coaching • Softwareentwicklung • Mobile Apps (Windows 8, Windows Phone, Android, iOS) • Entwicklung von Web-Anwendungen 33

    ×