La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Détecter et éviter les fuites de mémoire dans les applications .NET

Présentations similaires


Présentation au sujet: "Détecter et éviter les fuites de mémoire dans les applications .NET"— Transcription de la présentation:

1 Détecter et éviter les fuites de mémoire dans les applications .NET
Fabrice MARGUERIE Architecte .NET metaSapiens Yann SCHWARTZ Architecte .NET Polom 1 min date

2 Au programme Les principes Détecter et corriger
Prévenir plutôt que guérir Indiquer qu’on se base sur des retours d’expérience date

3 Au programme Les principes Détecter et corriger
Prévenir plutôt que guérir

4 La mémoire en .NET La mémoire du processus La pile, le tas
Le Garbage Collector Ce qui retient les instances Références statiques GCHandles Références des piles (une pile par thread) Finalization queue 3 min date

5 Fuites de mémoire Définition
En informatique, une fuite de mémoire est un type particulier de consommation non intentionnelle de mémoire par un programme qui ne libère pas comme il le devrait la mémoire dont il n'a plus besoin. Les causes les plus classiques d'une telle situation sont : un oubli un bug une méconnaissance 4 min date

6 Fuites de mémoire Les langages qui présentent une gestion automatisée de la mémoire, tels Java, C#, VB.NET ou LISP, ne sont pas immunisés contre les fuites de mémoire. Le garbage collector récupère uniquement la mémoire qui n'est plus accessible. Il ne libère pas la mémoire tant qu'elle reste accessible. En .NET, cela signifie que des objets accessibles par au moins une référence ne seront par relâchés par le garbage collector. Rappeler la différence entre managé et non-managé : en C, C++ classique, Delphi classique, etc., on doit libérer soi-même la mémoire avec des appels à free, Free, delete, ou autre en .NET la libération est automatique. Rappeler que ça ne veut pas dire qu'on ne doit se soucier de rien. On est en managé, mais on peut maintenir facilement en vie bcp de mémoire. On référence aussi des ressources non-managées - connexions à des bases de données, objets graphiques, et autres objets systèmes. Transition vers la suite en disant qu'en .NET il y a des pièges (événements, etc.) qu'on va détailler dans le reste de la session. date

7 Fuites de mémoire Une goutte d'eau n'est pas un gros problème. Mais goutte par goutte, une fuite peut devenir un problème majeur. En informatique, même une petite fuite peut mettre le système à genoux si elle se produit plusieurs fois. date

8 Au programme Les principes Détecter et corriger
Prévenir plutôt que guérir

9 Les étapes de la traque 1. Détecter la fuite 2. Trouver la ressource qui fuit 3. Décider où et quand la libérer la ressource dans le code 1 min date

10 Fabuleuse application PhotoLight
Démo Fabuleuse application PhotoLight 8 min (PhotoLight + TaskManager + PerfMon) date

11 Photo…Light ?

12 Les outils pour agir Trois approches complémentaires
Vue haut niveau, audit général : dotTrace Plus en détail : .NET Memory Profiler Pour les explorateurs : WinDbg 4 min La recherche de fuites mémoire n'est pas forcément chose compliquée. Il existe différents outils pour différents cas de figure et utilisateurs : - Pour une vue haut niveau, un audit général : dotTrace Pour creuser la question et analyser d'éventuels problème (mais nécessitant une connaissance plus poussée du modèle mémoire de la CLR) : .NET Memory Profiler Pour une approche exploratoire, et pour ceux habitués aux outils bas niveau : windbg date

13 VMMap date

14 dotTrace 9 min date

15 dotTrace date

16 dotTrace date

17 Problème identifié Evénement statique PhotoLight.exe MainForm
DetailsForm OptionsForm SystemEvents.InstalledFontsChanged date

18 .NET Memory Profiler 8 min date

19 .NET Memory Profiler

20 Problème identifié Désabonnement manquant PhotoLight.exe MainForm
OpacityChanged DetailsForm OptionsForm date

21 WinDbg Debugger natif/managed et « graphique » Installation minimale
Permet de s’attacher à un processus ou d’explorer un dump mémoire Idéal pour se plonger dans les entrailles d’un processus 10 min date

22 Extensions WinDbg Sos.dll permet d’examiner la mémoire managed
!DumpHeap liste des instances du tas !DumpObject !GCRoot trouve l’instance racine d’une instance

23 WinDbg Montrer fenêtre Modules en debug sous VS ? date

24 Problème identifié Code généré à la volée PhotoLight.exe MainForm
Assemblage XmlSerializer Assemblage XmlSerializer Settings Manager DetailsForm OptionsForm date

25 Problèmes identifiés Dispose pas appelée Code généré à la volée
PhotoLight.exe MainForm Assemblage XmlSerializer Assemblage XmlSerializer Settings Manager DetailsForm Context Menu SystemEvents.UserPreferenceChanged date

26 Au programme Les principes Détecter et corriger
Prévenir plutôt que guérir

27 Causes courantes Références statiques 3 min date

28 Causes courantes Evénements statiques Evénements sans désabonnement

29 Causes courantes Dispose pas appelé
Traitement réalisé dans Dispose incomplet

30 Il y a de quoi varier les plaisirs…
Code compilé à la volée Spécifiques aux technologies (Silverlight, WPF, applications composites, etc.)

31 Prévenir plutôt que guérir
Contrôler la possession des objets Analyse statique (NDepend, …) Mais avant tout une bonne connaissance de son code Chaque += (ou AddHandler) est un ennemi en puissance ! -= ! using et Dispose WeakEvents EventBroker Ou tout simplement relancer l’appli… 5 min date

32 Prévenir plutôt que guérir
On n’est pas à l’abri d’un oubli Ecran de monitoring intégré

33 Outils Outils dédiés au profilage en .NET dotTrace, .NET Memory Profiler, ANTS Profiler, YourKit Profiler, PurifyPlus, Aqtime, CLR Profiler, … WinDbg, SOS.dll, linqdbg VMMap Bear, GDI Usage 1 min date

34 Ressources Article Détecter et éviter les fuites de mémoire et de ressources dans les applications .NET En français sur DotNetGuru En anglais sur MSDN Livre Advanced .NET Debugging Mario Hewardt, également auteur de Advanced Windows Debugging Livre Debugging Microsoft .NET 2.0 Applications John Robbins

35 Ressources Blog de Tess Ferrandez, ASP.NET Escalation Engineer chez Microsoft Détection de fuites de handler d’événements avec WinDbg (blog de David Anson, MS) Autres liens à la fin de l’article

36 Contacts Architecture et expertise .NET
@abolibibelot

37 Compléments

38 Bear et GDIUsage

39


Télécharger ppt "Détecter et éviter les fuites de mémoire dans les applications .NET"

Présentations similaires


Annonces Google