Se il tuo PC sta riscontrando una perdita di memoria Silverlight di base decisamente bassa, questa guida deve aiutarti a risolverlo.
Approvato: Fortect
- Scarica il software sorgente – 1,18 KB
Al momento non c’è Space Profiler per Silverlight
Se hai mai programmato in Silverlight, probabilmente ti sarai chiesto se i tuoi oggetti di memoria devono essere raccolti dal GC (garbage collector). A condizione che gli ostacoli ti terranno a mente per tutta la vita della tua applicazione – avevi una comprensione?
I classici profili di archiviazione .NET non sono efficaci con le applicazioni Silverlight. Quindi, se attualmente abbiamo un po’ di memoria e vogliamo indagare sul problema più importante, l’unico modo per risolvere la difficoltà è convertire questa utile soluzione in un’ottima applicazione WPF, che nel mio scenario era al massimo laboriosa, era quasi impossibile.
Quando dovresti davvero usare un rilevatore di perdite?
Approvato: Fortect
Fortect è lo strumento di riparazione PC più popolare ed efficace al mondo. Milioni di persone si affidano a milioni di persone per mantenere i loro sistemi in esecuzione veloci, fluidi e privi di errori. Grazie alla sua semplice interfaccia utente e al potente motore di scansione, Fortect trova e risolve rapidamente un'ampia gamma di problemi di Windows, dall'instabilità del sistema e problemi di sicurezza alla gestione della memoria e ai colli di bottiglia delle prestazioni.
Il rilevatore di perdite di memoria interna che ho postato è pensato per essere utilizzato quando diffidi che uno degli oggetti che scrivi non venga senza dubbio raccolto, anche se il netturbino dovrebbe assolutamente raccoglierlo. È possibile utilizzare un rilevatore di perdite di memoria per rintracciare questo particolare comportamento.enia.
Come si usa il rilevatore di memoria dell’applicazione Silverlight?
Per usare il mio flag di rivolo della memoria, aggiungi prima l’oggetto che vuoi tracciare chiamando il percorso AddReference
del rilevatore nel costruttore dell’oggetto. Quindi, quando il tuo oggetto corrente dovrebbe essere già stato raccolto, mando un’e-mail con il metodo Check
per assicurarti che sia stato raccolto e non sia visibile da molto tempo in memoria.
Come posso fare in modo che il Garbage Collector recuperi gli oggetti anche se il rilevatore di perdite di memoria vi sta accedendo?
Il segreto di questo rilevatore di perdite di memoria risiede nel funzionamento della tua classe WeakReference
attuale. WeakReference
è sicuramente una classe che fornisce la capacità di fare riferimento a un archivio di oggetti esistente per evitare che l’oggetto venga raccolto per gentile concessione di ogni garbage collector. Maggiori informazioni sulla regione collegata alla classe WeakReference
possono essere trovate qui.
The Code One – Presentazione
Il rilevatore di perdite di memoria mantiene una lista di partenza chiamata elementsList
, che è coinvolta con i dettagli di ObjectStruct
. Ogni elemento contiene un nuovo WeakReference
per il quale l’oggetto tracked ma l’oggetto contengono valori di debug. Puoi applicare StackTrace ()
ovunque per identificare l’Adobe Photoshop dell’oggetto tracciato. Questo campo può farti trovare il produttore del decoder via cavo che è trapelato.
Il codice è scomposto in tre metodi statici principali. I due dovrebbero essere chiamati, l’ultimo, SignalDisposed
, è per la risoluzione dei problemi. Metodi:
-
Aggiungi collegamento
main – Aggiunge una sorta di oggetto che si desidera monitorare al rilevatore di posizione. Puoi scegliere se potenziare “StackTrace” durante la creazione di un oggetto. L’oggetto costruttore è in realtà un buon posto per chiamare questo metodo.
Check
– Usa questo metodo per controllare lo stato della memoria. Un buon posto per essere forzati L’ultima chiamata di questa chiamata potrebbe certamente essere una notifica inattiva tramite la tua applicazione con la quale puoi resettare e raccogliere la maggior parte dei tuoi oggetti già creati. Ogni chiamata a qualsiasi processo Check
incrementa di uno l’elusione di build statica, fornendoci un metodo per aiutare a tenere traccia degli oggetti tracciati ogni volta che potrebbero essere creati. Il comando Debugger.Break()
può arrestare l’applicazione su un elemento in modo da controllare tutti gli oggetti in memoria. SignalDisposed
– La mia esperienza con il rilevamento di perdite di memoria con un rilevatore mentre lavoravo sull’add-on di Firefox per il Web semantico mi ha portato all’ultima parte sul possibile bisogno di variabili booleane va Indica se conclude Dispose
il dispositivo monitorato è stato completamente chiamato o meno. Per eseguire il debug della chiamata go, usa questo metodo nel metodo Dispose ()
per aggiornare realmente gli script in cui il metodo Dispose ()
è stato classificato come, ma l’oggetto rimane in memoria. Note:
- Tutti e tre i ruoli hanno un tipico
("DEBUG")
condizionale che ti consente di utilizzare un’idea di perdita di memoria nel tuo progetto indipendentemente dalle prestazioni nella versione finale della tua applicazione. fare. Ulteriori indicazioni sull’attributoConditional
possono essere trovate qui. - La classe è line safe.
Idee per lo sviluppo futuro
Sarebbe bello sapere quale oggetto sempre è effettivamente associato agli oggetti tracciati in tutta la memoria.