Durante la lettura di documenti Xamarin nella sezione "Performance", ho notato il seguente capitolo:Xamarin garbage collector e circolari riferimenti
Il seguente diagramma illustra un problema che può verificarsi con riferimenti forti:
L'oggetto A ha un forte riferimento all'oggetto B e l'oggetto B ha un forte riferimento all'oggetto A. Tali oggetti sono noti come oggetti immortali a causa della presenza del cir riferimenti forti cular. Questa relazione genitore-figlio non è insolita e, di conseguenza, nessuno dei due oggetti può essere reclamato dal garbage collector, anche se gli oggetti non sono più in uso dall'applicazione.
Questa è la prima volta che ho sentito parlare di "oggetti immortali" nel contesto C# /. NET/Mono.
La pagina continua quindi con un suggerimento per utilizzare uno WeakReference
in uno degli oggetti, che rimuoverà il riferimento circolare e risolverà questo "problema".
Allo stesso tempo, documenti Xamarin su garbage collection affermazione che:
Xamarin.Android usa Mono di Simple Generational garbage collector. Questo è un garbage collector mark-and-sweep [...]
I GC non sono contrassegnati e trascinati da riferimenti circolari?
Grazie. Ho anche notato che è possibile abilitare SGen su iOS (c'è una casella di controllo da qualche parte nelle opzioni), ma è contrassegnato come "sperimentale". Qualcuno ha avuto esperienza con SGen su iOS in pratica e risolve questo problema? – Lou
C'è un [Nuovo sistema di conteggio dei riferimenti] (https://developer.xamarin.com/guides/ios/advanced_topics/newrefcount/), Se ho capito bene, si propone di risolvere il problema opposto (oggetto raccolto troppo aggressivamente). È interessante notare che è un'opzione diversa da SGen/Boehm. Immagino che significhi che anche con SGen, l'oggetto iOS viene conteggiato con riferimento e che i riferimenti circolari dovrebbero essere evitati. – bwt