0% ont trouvé ce document utile (0 vote)
3 vues1 page

DotNet Memory Management

Le document présente une référence sur la gestion de la mémoire dans .NET et le CLR, incluant des concepts clés tels que le Managed Heap, le Garbage Collector, et la distinction entre types de valeur et types de référence. Il aborde également les générations du Garbage Collector, les bonnes pratiques pour l'utilisation de IDisposable, ainsi que des outils de diagnostic et de profiling. Enfin, il souligne l'importance de la configuration du GC en production et les anti-patterns à éviter.

Transféré par

ayoubchaabi.fr
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues1 page

DotNet Memory Management

Le document présente une référence sur la gestion de la mémoire dans .NET et le CLR, incluant des concepts clés tels que le Managed Heap, le Garbage Collector, et la distinction entre types de valeur et types de référence. Il aborde également les générations du Garbage Collector, les bonnes pratiques pour l'utilisation de IDisposable, ainsi que des outils de diagnostic et de profiling. Enfin, il souligne l'importance de la configuration du GC en production et les anti-patterns à éviter.

Transféré par

ayoubchaabi.fr
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Gestion de la Memoire en .

NET / CLR
CLR • Managed Heap • Stack • Garbage Collector • Value vs Reference Types
.NET 8 LTS — Reference Sheet

1. CLR et Memoire Managee 5. Modes et Configuration du GC

CLR (Common Language Runtime) Moteur d'execution .NET — equivalent


Workstation
JVM en Java
GC Mode par defaut pour apps desktop — GC sur t
Managed Heap Zone memoire geree automatiquement
Server
par leGC
GC 1 thread GC par CPU — optimal pour [Link]
Stack Memoire par thread — variables locales
Concurrent
et appels GC Background GC — reduit les pauses Stop-The-W
Large Object Heap (LOH) Objets >= 85 000 octets — rarement compacte
DATAS GC .NET 7+ — Dynamic Adaptation To App Size
Pinned Object Heap (POH) [Link]:
.NET 5+ — objets fixes en memoire (interop natif)
"GCConserve": false, "ServerGC": true,

2. Value Types vs Reference Types "GCHeapHardLimit": 536870912 // 512 MB max

VALUE TYPES REFERENCE TYPES


(struct, int, bool, float…) (class, string, array…) 6. Span<T>, Memory<T> et Allocation Zero
Stockage: Stack (ou inline dans objet) Stockage: Heap — reference sur Stack
Span<T> Vue sur memoire contigue — Stack only, zero a
Copie: Par valeur — copie complete Copie: Par reference — meme objet
ReadOnlySpan<T> Version lecture seule — ideal pour parsing de st
GC: Non collecte par le GC GC: Collecte si plus de reference
Memory<T> Comme Span<T> mais utilisable en async / Hea
Nullable: int? avec Nullable<T> Null: Nullable par defaut
ArrayPool<T> Reutilisation de tableaux — evite allocations rep
Perf: Tres rapide — pas d'allocation Perf: Allocation + GC overhead
stackalloc Alloue sur la Stack — stackalloc int[128] — Spa
Heritage: Derive de [Link] Heritage: Derive de [Link]
ref struct Struct ne pouvant exister que sur la Stack — ze

3. Generations du Garbage Collector


7. References Faibles et GC Handles

Gen 0 WeakReference<T>
Objets recemment alloues. Collection la plus frequente et la plus rapide. Dure < 1ms. Reference non bloquante — GC peut colle
[Link]() Epingle un objet (Pinned) pour interop ave
ConditionalWeakTable Associe metadonnees sans empecher la c
Gen 1 [Link](obj)
Buffer entre Gen 0 et Gen 2. Objets ayant survecu a 1 collecte. Collection moderee. Empeche le GC de collecter obj avant cet
[Link]() Force une collecte — a eviter en productio
[Link]() Retourne la taille approx. du Heap manage
Gen 2 Objets a longue duree de vie (caches, singletons). Collection couteuse — eviter.
8. Diagnostics et Outils de Profiling

LOH Large Object Heap : objets >= 85 000 octets. Rarement compacte — risquedotnet-counters
de fragmentation. Metriques temps reel : GC, allocations, threads
dotnet-dump Capture et analyse de dump memoire
dotnet-gcdump Dump du GC Heap pour analyse dans VS / Pe
PerfView Outil Microsoft — ETW events, allocation profil
4. IDisposable et Ressources non managees
Visual Studio Diagnostic Tools — Heap Snapshot, allocation
IDisposable Interface a implementer pour liberer ressources nonBenchmarkDotNet
managees Micro-benchmarks precis — mesure allocation
Dispose() Appele explicitement ou via using — liberation deterministe
MemoryDiagnoser [MemoryDiagnoser] attribute — allocations par
using block using (var r = new Resource()) { … } — Dispose() garanti
using decl. using var r = new Resource(); — .NET Core 3+ syntaxe
9. Bonnes Pratiques — Anti-patterns
Finalizer ~T() Appele par GC si Dispose() oublie — non deterministe, lent
SafeHandle A FAIRE ✓
Wrapper securise pour handles natifs (fichiers, sockets…)
Toujours implementer IDisposable pour ressources non managees
Privilegier Span<T> et ArrayPool<T> pour eviter les allocations
Utiliser struct pour petits types immutables (<= 16 octets)
Configurer ServerGC en production ([Link] Core)
A EVITER ✗
Appeler [Link]() manuellement en production
Implementer un finalizer sans IDisposable (pattern Dispose)
Ignorer les warnings d'allocation dans les hot paths

CLR Memory Quick Reference

Managed Heap Stack LOH >= 85KB Gen 0 / 1 / 2 IDisposable Span<T> WeakReference ServerGC A

.NET 8 LTS — CLR Memory Management — Reference pedagogique

.NET / CLR Memory Management — Reference Sheet


CLR • Managed Heap • GC Generations • Span<T> • IDisposable • Diagnostics
.NET 8 LTS — Document pedagogique

Vous aimerez peut-être aussi