Ajuste de Rendimiento
Optimiza el renderizado y la memoria
El perfil de recursos de Doconut está dominado por tres cosas: render DPI, lo que permanece en caché, y cuánto tiempo viven las sesiones. Esta guía recorre las palancas en orden de impacto.
Resolución — la palanca más grande
ImageResolution (25–300 DPI) controla tanto el tiempo de renderizado como el tamaño de la imagen. La mayoría de los formatos usan 200 DPI por defecto; las imágenes y PSD usan 100 por defecto.
// A document list preview doesn't need print quality
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });Reducir a la mitad el DPI reduce aproximadamente a la cuarta parte la cantidad de píxeles por página — renderizados más rápidos, transferencias más pequeñas, menos memoria de caché. Reserva 250–300 DPI para casos de uso con mucho zoom (CAD, planos de ingeniería).
Para PDFs con imágenes incrustadas intensas, PdfConfig añade ajustes más finos: CompressImages + CompressQuality, ResizeImages + ResizeResolution, y CompressFast. Para imágenes simples, ImageConfig.MaxImagePixelSize (por defecto 3000 px) limita el tamaño de salida.
Caché de páginas — memoria vs. re-renderizado
BaseConfig.CachePages (por defecto true) mantiene cada página renderizada en memoria durante la vida de la sesión. Ese es el valor predeterminado correcto para la visualización interactiva — los usuarios se desplazan adelante y atrás. Desactívalo cuando:
- los documentos son enormes y se visualizan una sola vez, de principio a fin,
- muchas sesiones concurrentes multiplicarían las páginas en caché,
- prefieras gastar CPU por vista en lugar de ocupar RAM.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });En el cliente, ViewerConfig.CacheEnabled = true precarga una pequeña ventana móvil de imágenes de páginas próximas en la memoria del navegador. Es una caché de prefetch por vista, no un localStorage persistente.
Sesiones — la memoria que no ves
Cada sesión abierta mantiene el modelo de documento analizado más (con CachePages) sus páginas renderizadas, hasta que el TimeOut deslizante (por defecto 60 minutos) transcurre desde la última solicitud. Dos hábitos mantienen esto bajo control:
- Cierra lo que ya no necesitas.
viewer.CloseDocument(token)libera el motor inmediatamente en lugar de esperar la ventana de inactividad. - Ajusta el tiempo de espera. Una vista previa que los usuarios miran durante dos minutos no necesita una sesión de una hora:
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });Recuerda la compensación: después de expirar el widget muestra Document session not found. Please re-open document. — elige un tiempo de espera que coincida con las sesiones de lectura reales.
Conmutadores específicos por formato
- Excel:
MemoryOptimizationPreferenceestá activado por defecto y reduce la huella de memoria al renderizar libros de trabajo muy grandes — déjalo activado, o establécelo afalsesi prefieres cambiar memoria por una pequeña ganancia de velocidad;SheetNames/PrintArearestringen el renderizado a lo que importa. - El modo de redirección tiene un costo inicial:
DefaultRender = falseconvierte el documento completo a PDF al abrirlo. Obtienes búsqueda nativa basada en texto, pero en un documento de 500 páginas la llamada de apertura lleva esa conversión — no lo actives de forma reflexiva. - Word/PPT en Linux/Docker: la falta de fuentes provoca una búsqueda de respaldo lenta y métricas incorrectas; apunta
FontFoldersa un directorio con tus fuentes. - Presentaciones en Linux/macOS: los archivos PPT/PPTX/PPS/POT/ODP pueden abrirse, pero el renderizado con el motor de presentaciones actual requiere
libgdiplusnativo y el interruptor de tiempo de ejecuciónSystem.Drawing.EnableUnixSupport=true. Otras familias de formatos usan la ruta de renderizado multiplataforma normal.
Estrategias del lado del cliente
LargeDoc = true— estrategia de carga diferida para documentos muy grandes; las páginas se cargan a medida que el usuario se acerca a ellas.AutoLoad = false(por defecto) — no renderizar hasta que realmente llames aView(token).ShowThumbs = false— omitir la generación/solicitud de miniaturas para vistas previas de una sola página o incrustadas.- Habilitar
FixedZoomevita cambios de zoom libres; cuando mapeas unViewerConfigen C#, ajustaFixedZoomPercentMobile(valor predeterminado C# 75) para pantallas pequeñas.
Inicializar una vez, no por solicitud
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) pertenece a Program.cs — registrar codificaciones por solicitud es trabajo desperdiciado; olvidarlo por completo rompe documentos legados con páginas de código.
Lista de verificación de ajuste
- Establece la
ImageResolutionmás baja que acepte tu UX. - Mantén
CachePagesactivado para visualización interactiva; desactívalo para escenarios de un solo paso o alta concurrencia. - Cierra las sesiones explícitamente; acorta
TimeOutdonde el uso sea intermitente. - Usa
LargeDoc+AutoLoad = falsepor defecto en el cliente para documentos grandes. - Usa
DefaultRender = falsesolo cuando necesites una proyección PDF con texto.
¿Fue útil esta página?