33
5 Memory Leaks, die auch in Ihrer .NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Embed Size (px)

Citation preview

Page 3: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Danke, dass Sie alle gekommen sind!

Page 4: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Ich habe bereits beim Titel meiner Session gelogen!

Page 6: 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

// free(array) // ups, vergessen

Page 7: 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

// free(array) // ups, vergessen

Page 8: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Bild: © iStock.com/matt_benoit

Page 9: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Bild: © iStock.com/eric1513

Page 10: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Wie funktioniert eigentlich der Garbage Collector?

* Darstellung nicht 100 % korrekt, dafür aber verständlich ;-)

Page 11: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Der CLR garbage collector (GC) ist ein “almost-concurrent,

parallel, compacting, mark-and-sweep, generational, tracing GC”

Page 12: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

?

Page 13: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Object referenceStack Heap

Mark: Lebende Objekte Identifizieren

• Ausgehend von einer Wurzel• Statische Variable• Lokale Variable• Finalization Queue

Page 14: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Object referenceStack Heap

Mark: Lebende Objekte Identifizieren

Page 15: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Object referenceStack Heap

Sweep: Tote Objekte freigeben

Page 16: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Object referenceStack Heap

Compact: Objekte zusammen führen

Page 17: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Mark – Sweep – Compact ist performancelastig

Page 18: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Gen 0 Gen 1 Gen 2

Generational Garbage Collection (Gen 0 Collection: Start)

Page 19: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Gen 0 Gen 1 Gen 2

Generational Garbage Collection (Gen 0 Collection: Ende)

Page 20: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Gen 0 Gen 1 Gen 2

Generational Garbage Collection (Next Gen 0 Collection: Start)

Page 21: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Gen 0 Gen 1 Gen 2

Generational Garbage Collection (Next Gen 0 Collection: Ende)

Page 22: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Gen 0 Gen 1 Gen 2

Generational Garbage Collection (Gen 1 Collection: Start)

Page 23: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Gen 0 Gen 1 Gen 2

Generational Garbage Collection (Next Gen 0 Collection: Start)

Page 24: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Gen 0 Gen 1 Gen 2

Generational Garbage Collection (Next Gen 0 Collection: Ende)

Page 25: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Warum geht trotzdem noch was schief?

Page 26: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

a) Weil Ihr Kollege was falsch gemacht hat

Bild: © iStock.com/NinaMalyna

Page 27: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

b) Weil Microsoft was falsch gemacht hat

Bild: © iStock.com/ThomasTroy

Page 28: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Wie finden wir unser Leak?

Page 29: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

Besser: Ein Memory Profiler

Page 30: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

DemoMemoy Leaks unter .NET finden

Source Code unterhttp://github.com/AndreKraemer

Page 31: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

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!

Page 33: 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater

33

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