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 // free(array) // ups, vergessen
Klassisches Memory Leak int *array = malloc(sizeof(int) * 100); memset(array,0,sizeof(int) * 100); // use the array // free(array) // ups, vergessen
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 Lokale Variable Finalization Queue
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 0Gen 1Gen 2 Generational Garbage Collection (Gen 0 Collection: Start)
Gen 0Gen 1Gen 2 Generational Garbage Collection (Gen 0 Collection: Ende)
Gen 0Gen 1Gen 2 Generational Garbage Collection (Next Gen 0 Collection: Start)
Gen 0Gen 1Gen 2 Generational Garbage Collection (Next Gen 0 Collection: Ende)
Gen 0Gen 1Gen 2 Generational Garbage Collection (Gen 1 Collection: Start)
Gen 0Gen 1Gen 2 Generational Garbage Collection (Next Gen 0 Collection: Start)
Gen 0Gen 1Gen 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
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!
Homepage | | | Vielen Dank! Blog Xing Facebook Twitter Google+ 32 Vielen Dank an Ben Emmett von Redgate Software für die Unterstützung bei den FolienBen Emmett Redgate Software Sämtliche Abbildung wurden ordnungsgemäß bei IStockPhoto lizensiert.
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