Ho fatto due domande, ma sono gentili dei relativi ecco vanno come uno ...domande TreeViewer pigro e differite
Come garantire la raccolta dei rifiuti di nodi dell'albero che non sono attualmente visualizzati utilizzando TreeViewer
(SWT.VIRTUAL
) e ILazeTreeContentProvider
? Se un nodo ha 5000 figli, una volta che vengono visualizzati dal visualizzatore non vengono mai rilasciati, quindi Errore di memoria insufficiente se l'albero ha un numero elevato di nodi e foglie e non ha dimensioni di heap abbastanza grandi. Esiste una sorta di best practice su come evitare perdite di memoria, causate da una vista mai chiusa che contiene un treeviewer con grandi quantità di dati (centinaia di migliaia di oggetti o addirittura milioni)? Forse forse c'è qualche interfaccia di callback che consente una maggiore flessibilità con gli elementi visualizzatore/fornitore di contenuti?
E 'possibile combinare deffered (DeferredTreeContentManager
) e pigro (ILazyTreeContentProvider
) carico per una singola TreeViewer
(SWT.VIRTUAL
)? Per quanto comprendo guardando esempi e API, è possibile utilizzare solo uno in un dato momento ma non entrambi in congiunzione, ad es. , preleva SOLO i figli visibili per un determinato nodo E li preleva in un thread separato utilizzando l'API di lavoro. Ciò che mi infastidisce è che l'approccio differito carica TUTTI i bambini. Sebbene in un thread diverso, si caricano comunque tutti gli elementi anche se solo un sottoinsieme minimo viene visualizzato contemporaneamente.
posso fornire esempi di codice alle mie domande, se necessario ...
Attualmente sto lottando con quelli me quindi se riesco a trovare qualcosa nel frattempo sarò felice di condividerle qui.
Grazie!
saluti, Svilen
per il caricamento lazy, i visualizzatori segnalano al provider che verrà visualizzato un elemento specifico (a causa dello scorrimento o dell'espansione). le attuali implementazioni differite possono essere facilmente ottenute utilizzando un lavoro nei metodi del fornitore di contenuti. il problema con entrambi i metodi, perché potrebbero essere esclusivi: il caricamento pigro presuppone che tu conosca il conteggio degli elementi in anticipo e sostituisca il contenuto del visualizzatore nel momento in cui viene visualizzato il contenuto. non vuoi caricare il contenuto (ad esempio da una risorsa di rimozione), ogni volta che l'utente scorre o espande qualcosa. – benez