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