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.
+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
@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
collegamento interrotto/inattivo – springy76