SlideShare una empresa de Scribd logo
1 de 33
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 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 die Anzahl dynamisch generierter
Assemblies durch Caching oder ähnliches
•Implementieren Sie INotifyPropertyChanged wenn
Sie Databinding nutzen
•Blockieren Sie den Finalizer nicht!
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.
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

Más contenido relacionado

Destacado

Tema La Serena
Tema La SerenaTema La Serena
Tema La Serena
paz_nuzz
 
Definiciones
DefinicionesDefiniciones
Definiciones
tortualan
 
Flugschule Salzburg Prospekt 2012
Flugschule Salzburg Prospekt 2012Flugschule Salzburg Prospekt 2012
Flugschule Salzburg Prospekt 2012
flugschulesalzburg
 
Graffitis
GraffitisGraffitis
Graffitis
Pirry
 

Destacado (17)

Recomendaciones para disminuir el riesgo de alergias
Recomendaciones para disminuir el riesgo de alergiasRecomendaciones para disminuir el riesgo de alergias
Recomendaciones para disminuir el riesgo de alergias
 
Fotosquehicieronhistoria
FotosquehicieronhistoriaFotosquehicieronhistoria
Fotosquehicieronhistoria
 
SOLO Base by SALT Solutions
SOLO Base by SALT SolutionsSOLO Base by SALT Solutions
SOLO Base by SALT Solutions
 
MIS ARTISTAS FABORITOS
MIS ARTISTAS FABORITOSMIS ARTISTAS FABORITOS
MIS ARTISTAS FABORITOS
 
Enseñanza de lenguas adicionales (Judd, Tan, Walberg, 2001).
Enseñanza de lenguas adicionales (Judd, Tan, Walberg, 2001).Enseñanza de lenguas adicionales (Judd, Tan, Walberg, 2001).
Enseñanza de lenguas adicionales (Judd, Tan, Walberg, 2001).
 

Kenne Deine Kunden - Wie man mit Hilfe von Web-Analyse Umsätze steigern und...

Kenne Deine Kunden - Wie man mit Hilfe von Web-Analyse Umsätze steigern und...
Kenne Deine Kunden - Wie man mit Hilfe von Web-Analyse Umsätze steigern und...

Kenne Deine Kunden - Wie man mit Hilfe von Web-Analyse Umsätze steigern und...
 
Die BVL in Social Media
Die BVL in Social MediaDie BVL in Social Media
Die BVL in Social Media
 
Distribuidor De Vipconnectz P 1
Distribuidor De Vipconnectz P 1Distribuidor De Vipconnectz P 1
Distribuidor De Vipconnectz P 1
 
Eric Mozanowski - Das Wesen der Dinge: Minimalismus
Eric Mozanowski - Das Wesen der Dinge: MinimalismusEric Mozanowski - Das Wesen der Dinge: Minimalismus
Eric Mozanowski - Das Wesen der Dinge: Minimalismus
 
PDVSA 1997-2008
PDVSA 1997-2008PDVSA 1997-2008
PDVSA 1997-2008
 
La Ratonera
La RatoneraLa Ratonera
La Ratonera
 
Tema La Serena
Tema La SerenaTema La Serena
Tema La Serena
 
Definiciones
DefinicionesDefiniciones
Definiciones
 
Flugschule Salzburg Prospekt 2012
Flugschule Salzburg Prospekt 2012Flugschule Salzburg Prospekt 2012
Flugschule Salzburg Prospekt 2012
 
Graffitis
GraffitisGraffitis
Graffitis
 
Ferientrends
FerientrendsFerientrends
Ferientrends
 
Medienbildung in der schule - Recherche
Medienbildung in der schule - RechercheMedienbildung in der schule - Recherche
Medienbildung in der schule - Recherche
 

Más de André Krämer

Más de André Krämer (16)

Xamarin.Forms App in einer Stunde
Xamarin.Forms App in einer StundeXamarin.Forms App in einer Stunde
Xamarin.Forms App in einer Stunde
 
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
 
Codewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximierenCodewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximieren
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
 
Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018
 
Android Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickelnAndroid Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickeln
 
Xamarin ohne Mac und Android SDK? - So weit kommen Sie mit dem Xamarin Live P...
Xamarin ohne Mac und Android SDK?- So weit kommen Sie mit dem Xamarin Live P...Xamarin ohne Mac und Android SDK?- So weit kommen Sie mit dem Xamarin Live P...
Xamarin ohne Mac und Android SDK? - So weit kommen Sie mit dem Xamarin Live P...
 
Typische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
Typische Sicherheitslücken in ASP.NET MVC und Web API AnwendungenTypische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
Typische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
 
Lokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-AppsLokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-Apps
 
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
 
Entity Framework hinter den Kulissen
Entity Framework hinter den KulissenEntity Framework hinter den Kulissen
Entity Framework hinter den Kulissen
 
Performance trotz Entity Framwork
Performance trotz Entity FramworkPerformance trotz Entity Framwork
Performance trotz Entity Framwork
 
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
 
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern .NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
 
Zentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKZentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDK
 

5 Memory Leaks, die auch in Ihrer .NET Anwendung sein könnten

Notas del editor

  1. Ich habe mir 5 Beispiele aus meiner Praxis herausgesucht, bei denen ich als Berater gerufen wurde. Die werde ich gleich mit Ihnen durchgehen. Ich freue mich, wenn wir das ganze relativ interaktiv gestallten würden, Sie dürfen also gerne mitraten, wenn Sie glauben das Leak im Code entdeckt zu haben. Demo 1: Event Handler Demo 2: Static Dictionary als Cache Demo 3: Dynamic Assemblies Demo 4: DataBinding Demo 5: Disposable / Blocking Finazlizer