tengo realmente dos preguntas, sino que son una especie de relacionados, de manera que aquí se van como uno ...preguntas TreeViewer perezoso y diferidos
¿Cómo garantizar la recolección de basura de los nodos del árbol que no se muestran actualmente usando TreeViewer
(SWT.VIRTUAL
) y ILazeTreeContentProvider
? Si un nodo tiene 5000 hijos, una vez que el visor los muestra, nunca los suelta, , por lo tanto, Error de falta de memoria si su árbol tiene una gran cantidad de nodos y hojas y no tiene el tamaño de pila suficientemente grande. ¿Existe algún tipo de práctica recomendada sobre cómo evitar las pérdidas de memoria causadas por la vista nunca cerrada que sostiene un treeviewer con grandes cantidades de datos (cientos de miles de objetos o incluso millones)? ¿Tal vez haya alguna interfaz de devolución de llamada que permita una mayor flexibilidad con los elementos del proveedor de contenido/espectadores?
¿Es posible combinar DEFFERED (DeferredTreeContentManager
) y perezoso (ILazyTreeContentProvider
) de carga para un solo TreeViewer
(SWT.VIRTUAL
)? Por mucho que entiendo al ver ejemplos y API, solo es posible usar uno en un momento determinado, pero no ambos en conjunto, p. Ej. , busque SOLAMENTE los elementos secundarios visibles para un nodo determinado Y búsquelos en un subproceso separado utilizando la API de trabajos. Lo que me molesta es que el enfoque diferido carga TODOS los niños. Aunque en un hilo diferente, todavía carga todos los elementos aunque solo se muestre un subconjunto mínimo a la vez.
puedo proporcionar ejemplos de código a mis preguntas, si es necesario ...
Actualmente estoy luchando con los mismo así que si me las arreglo para llegar a algo, mientras tanto, voy a compartir con mucho gusto aquí.
Gracias!
Saludos, Svilen
para la carga diferida, los visitantes informan al proveedor que se va a mostrar un elemento específico (debido al desplazamiento o a la expansión). las implementaciones diferidas actuales se pueden lograr fácilmente usando un trabajo en los métodos del proveedor de contenido. el problema con ambos métodos, por qué pueden ser exclusivos: la carga diferida supone que conoce el conteo de elementos por adelantado y reemplaza el contenido del visor en el momento en que se muestra el contenido. no desea cargar el contenido (por ejemplo, desde un recurso de remoción), cada vez que el usuario se desplaza o expande algo. – benez