Grafos de objetos de páginas liberadas

Los trabajos secuenciales grandes pueden descartar los grafos de objetos limpios propios de cada página tras procesarla, reteniendo suficientes metadatos de fuente para materializar la página de nuevo a demanda

Límite de liberación

ReleaseLoadedPageObjectGraph libera la raíz indirecta de la página seleccionada y los objetos anidados de propiedad directa que hay debajo de ella

El recorrido no sigue los enlaces indirectos, así que las fuentes, imágenes, diccionarios de recursos, nodos del árbol de páginas y demás objetos compartidos entre páginas permanecen como propiedad del documento cargado

Las entradas de display list y raster específicas de la página se expulsan en el mismo límite

Seguridad y retención

Las páginas sucias, de escritura obligatoria, activas o no recargables por otro motivo se retienen y se reportan en lugar de descartarse

Las raíces de página respaldadas directamente por archivo se recargan desde su offset validado de referencias cruzadas, mientras que las raíces comprimidas se recargan por la ruta indexada de miembros del object-stream

Las raíces ordinarias cargadas desde stream o cifradas, sin una fuente reproducible de forma independiente, permanecen residentes

Procesamiento secuencial

for PageIndex := 0 to PDF.LoadedPageCount - 1 do
begin
  ProcessLoadedPage(PDF, PageIndex);
  PDF.ReleaseLoadedPageObjectGraph(PageIndex);
end;

Un fixture de regresión de 100,000 páginas alcanza un pico de 69.3 MiB en Win32, no muestra crecimiento en estado estacionario y luego rematerializa una página liberada con su número de objeto original y sus page boxes

Concurrencia

El acceso al grafo del documento cargado sigue siendo serializado por el llamador

No libere una página mientras otro thread está renderizando, inspeccionando o mutando la misma instancia del documento

See also: ReleaseLoadedPageObjectGraph, GetLoadedPageObjectGraphReleaseStatistics, THPDFPageObjectGraphReleaseStatistics, Lazy Page-Tree Loading, Bounded Object-Stream Cache