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

967 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
  • Als Erste(r) kommentieren

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

×