5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler,...
-
Upload
julius-huber -
Category
Documents
-
view
213 -
download
1
Transcript of 5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler,...
5 Memory Leaks, die auch in Ihrer .NET Anwendung sein
könntenAndré 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önntenAndré 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 referenceStack Heap
Mark: Lebende Objekte Identifizieren
• Ausgehend von einer Wurzel• Statische Variable• Lokale Variable• Finalization Queue
Object referenceStack Heap
Mark: Lebende Objekte Identifizieren
Object referenceStack Heap
Sweep: Tote Objekte freigeben
Object referenceStack 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
DemoMemoy Leaks unter .NET finden
Source Code unterhttp://github.com/AndreKraemer
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!
32
Homepage
[email protected] | http://andrekraemer.de | http://andrekraemer.de/blog | http://github.com/AndreKraemer
Vielen Dank!
Blog
Google+
Vielen Dank an Ben Emmett von Redgate Software für die Unterstützung bei den Folien
Sämtliche Abbildung wurden ordnungsgemäß bei IStockPhoto lizensiert.
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