Ho scritto un lungo socket server di connessione TCP in C#. Spike in memoria nel mio server succede. Ho usato dotNet Memory Profiler (uno strumento) per rilevare la perdita di memoria. Memory Profiler indica che l'heap privato è enorme e la memoria è qualcosa di simile (il numero non è reale, quello che voglio mostrare è GC0 e GC2 Gli spazi sono molto enormi, la dimensione dei dati è normale):Cosa sono i fori GC?
Managed heaps - 1,500,000KB
Normal heap - 1400,000KB
Generation #0 - 600,000KB
Data - 100,000KB
"Holes" - 500,000KB
Generation #1 - xxKB
Data - 0KB
"Holes" - xKB
Generation #2 - xxxxxxxxxxxxxKB
Data - 100,000KB
"Holes" - 700,000KB
Large heap - 131072KB
Large heap - 83KB
Overhead/unused - 130989KB
Overhead - 0KB
Howerver, qual è il foro del GC? documention di dotNet Memory Profiler definito i "buchi":
“buchi” rappresentano la memoria che è inutilizzato tra due assegnate istanze. I "buchi" vengono visualizzati quando l'heap non è completamente compattato, a causa delle istanze o delle ottimizzazioni aggiunte nel garbage collector di .
Quello che voglio sapere è:
- "buchi" appaiono tra ciò che tipo di due istanze assegnate?
- che tipo di istanze sono bloccate?
- Come compattare l'heap?
Spero che qualcuno possa spiegarlo.
Sospetto che l'articolo riguardi un diverso tipo di foro. – CodesInChaos
"I" buchi "rappresentano la memoria non utilizzata tra due istanze allocate." Fori "vengono visualizzati quando l'heap non è completamente compattato, a causa di istanze bloccate o ottimizzazioni nel garbage collector." [Dalla documentazione di .NET Memory Profiler] (http://memprofiler.com/onlinedocs/default.htm?turl=managedheaps.htm) – CodesInChaos
Perché ci sono così tante persone che invitano questa domanda? La domanda dell'autore non è chiara. Sulla base della modifica sembra anche che non abbia idea di cosa stia parlando. –