SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

En vedette

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 alergiasNoe Gomez Encino
 
Fotosquehicieronhistoria
FotosquehicieronhistoriaFotosquehicieronhistoria
FotosquehicieronhistoriaParadox
 
SOLO Base by SALT Solutions
SOLO Base by SALT SolutionsSOLO Base by SALT Solutions
SOLO Base by SALT Solutionssalt-solutions
 
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).Gonzalo Abio
 

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...Alexander Steireif
 
Distribuidor De Vipconnectz P 1
Distribuidor De Vipconnectz P 1Distribuidor De Vipconnectz P 1
Distribuidor De Vipconnectz P 1vozeninternet
 
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: Minimalismusolik88
 
La Ratonera
La RatoneraLa Ratonera
La Ratonerajlgmarro
 
Tema La Serena
Tema La SerenaTema La Serena
Tema La Serenapaz_nuzz
 
Definiciones
DefinicionesDefiniciones
Definicionestortualan
 
Flugschule Salzburg Prospekt 2012
Flugschule Salzburg Prospekt 2012Flugschule Salzburg Prospekt 2012
Flugschule Salzburg Prospekt 2012flugschulesalzburg
 
Graffitis
GraffitisGraffitis
GraffitisPirry
 
Medienbildung in der schule - Recherche
Medienbildung in der schule - RechercheMedienbildung in der schule - Recherche
Medienbildung in der schule - Recherchesimoross
 

En vedette (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
 

Plus de André Krämer

Xamarin.Forms App in einer Stunde
Xamarin.Forms App in einer StundeXamarin.Forms App in einer Stunde
Xamarin.Forms App in einer StundeAndré Krämer
 
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...André Krämer
 
Codewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximierenCodewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximierenAndré Krämer
 
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 2018André Krämer
 
Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018André Krämer
 
Android Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickelnAndroid Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickelnAndré Krämer
 
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...André Krämer
 
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 AnwendungenAndré Krämer
 
Lokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-AppsLokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-AppsAndré Krämer
 
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)André Krämer
 
Entity Framework hinter den Kulissen
Entity Framework hinter den KulissenEntity Framework hinter den Kulissen
Entity Framework hinter den KulissenAndré Krämer
 
Performance trotz Entity Framwork
Performance trotz Entity FramworkPerformance trotz Entity Framwork
Performance trotz Entity FramworkAndré Krämer
 
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)André Krämer
 
.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 André Krämer
 
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...André Krämer
 
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 SDKAndré Krämer
 

Plus 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

Notes de l'éditeur

  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