2010-05-14 13 views
7

In another question, Stephen C dice:Il costo per GC di utilizzare riferimenti deboli in C#?

Una seconda preoccupazione è che ci sono spese generali di esecuzione con l'utilizzo di deboli riferimenti. I costi evidenti sono quelli di creare riferimenti deboli e chiamare su di loro. Un costo meno evidente di è che il lavoro aggiuntivo significativo deve essere eseguito ogni volta che viene eseguito GC .

Quindi, qual è esattamente il costo per il GC di un riferimento debole? Che lavoro extra deve fare, e quanto è grande l'affare? Posso fare alcune ipotesi plausibili, ma sono interessato alla meccanica attuale.

risposta

3

Si prega di controllare l'articolo di Jeffrey Richter su Memory Management in .NET deve chiarire un po 'le cose.

+2

+1 bel articolo. Quindi, in generale, il sovraccarico di riferimenti deboli è solo quando si hanno molti riferimenti deboli perché il GC deve controllare se il target di riferimento debole sta per essere ripulito, se questo è il caso, impostare l'obiettivo del riferimento debole su nullo. In ogni caso, troverei strano se qualcuno ha molti riferimenti deboli nella loro applicazione. Generalmente non hai bisogno di nessuno. – Stormenet

+0

@Stormenet Bene, utilizzando ['ConditionalWeakTable (T)'] (https://msdn.microsoft.com/en-us/library/dd287757 (v = vs.110) .aspx) per aggiungere metadati a oggetti arbitrari senza avere preoccuparsi di ripulire le voci nella tabella dei metadati quando questi oggetti arbitrari ottengono la garbage collection può essere abbastanza utile a volte. A seconda di cosa stai facendo, immagino che sarebbe piuttosto facile crearne * molti *. – binki

+0

collegamento interrotto/inattivo – springy76

Problemi correlati