5 Memory Leaks, die auch in Ihrer .NET Anwendung
sein könntenAndré Krämer
Softwareentwickler, Trainer, Berater
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
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
DemoMemoy 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 die Anzahl dynamisch generierter Assemblies durch Caching oder ähnliches
• Implementieren Sie INotifyPropertyChanged wenn Sie Databinding nutzen
•Blockieren Sie den Finalizer nicht!
Homepage
[email protected] | http://andrekraemer.de | http://andrekraemer.de/blog | http://github.com/AndreKraemer
Vielen Dank!
Blog
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.
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