Ajuste de Desempenho
Otimize renderização e memória
O perfil de recursos do Doconut é dominado por três coisas: render DPI, o que permanece em cache, e quanto tempo as sessões duram. Este guia percorre as alavancas em ordem de impacto.
Resolução — a maior alavanca
ImageResolution (25–300 DPI) controla tanto o tempo de renderização quanto o tamanho da imagem. A maioria dos formatos tem padrão de 200 DPI; imagens e PSD têm padrão de 100.
// Uma visualização da lista de documentos não precisa de qualidade de impressão
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });Reduzir o DPI pela metade diminui aproximadamente para um quarto a contagem de pixels por página — renderizações mais rápidas, transferências menores, menos memória de cache. Reserve 250–300 DPI para casos de uso com muito zoom (CAD, desenhos de engenharia).
Para PDFs com imagens incorporadas pesadas, PdfConfig adiciona ajustes mais finos: CompressImages + CompressQuality, ResizeImages + ResizeResolution, e CompressFast. Para imagens simples, ImageConfig.MaxImagePixelSize (padrão 3000 px) limita o tamanho de saída.
Cache de página — memória vs. re-renderização
BaseConfig.CachePages (padrão true) mantém cada página renderizada na memória durante a vida da sessão. Esse é o padrão correto para visualização interativa — os usuários rolam para frente e para trás. Desative‑o quando:
- os documentos são enormes e visualizados uma única vez, de frente a trás,
- muitas sessões simultâneas multiplicariam as páginas em cache,
- você prefere pagar CPU por visualização a manter RAM.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });No cliente, ViewerConfig.CacheEnabled = true pré‑carrega uma pequena janela móvel de imagens de páginas próximas na memória do navegador. É um cache de pré‑busca por visualização, não um localStorage persistente.
Sessões — a memória que você não vê
Cada sessão aberta mantém o modelo de documento analisado mais (com CachePages) suas páginas renderizadas, até que o TimeOut deslizante (padrão 60 minutos) expire desde a última solicitação. Dois hábitos mantêm isso sob controle:
- Feche o que terminou.
viewer.CloseDocument(token)libera o motor imediatamente em vez de esperar a janela ociosa. - Ajuste o tempo limite adequadamente. Uma pré‑visualização que os usuários olham por dois minutos não precisa de uma sessão de uma hora:
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });Lembre‑se da troca: após a expiração o widget mostra Document session not found. Please re-open document. — escolha um tempo limite que corresponda às sessões reais de leitura.
Alternativas específicas de formato
- Excel:
MemoryOptimizationPreferenceestá ativado por padrão e reduz a pegada de memória ao renderizar planilhas muito grandes — deixe ativado, ou defina parafalsese quiser trocar memória por um pequeno ganho de velocidade;SheetNames/PrintArearestringem a renderização ao que importa. - O modo de redirecionamento tem um custo inicial:
DefaultRender = falseconverte o documento inteiro para PDF no momento da abertura. Ele permite busca nativa baseada em texto, mas em um documento de 500 páginas a chamada de abertura carrega essa conversão — não o habilite reflexivamente. - Word/PPT no Linux/Docker: fontes ausentes causam sondagem de fallback lenta e métricas incorretas; aponte
FontFolderspara um diretório com suas fontes. - Apresentações no Linux/macOS: arquivos PPT/PPTX/PPS/POT/ODP podem ser abertos, mas a renderização com o motor de apresentação atual requer
libgdiplusnativo e a chave de tempo de execuçãoSystem.Drawing.EnableUnixSupport=true. Outras famílias de formato usam o caminho normal de renderização multiplataforma.
Estratégias do lado do cliente
LargeDoc = true— estratégia de carregamento preguiçoso para documentos muito grandes; as páginas carregam à medida que o usuário se aproxima delas.AutoLoad = false(padrão) — não renderize até que você realmente chameView(token).ShowThumbs = false— pula a geração/solicitação de miniaturas para pré‑visualizações de página única ou incorporadas.- Habilitar
FixedZoomevita alterações de zoom livre; ao mapear um C#ViewerConfig, ajusteFixedZoomPercentMobile(padrão C# 75) para telas pequenas.
Inicialização única, não por requisição
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) pertence a Program.cs — registrar codificações por requisição é trabalho desperdiçado; esquecê‑las completamente quebra documentos legados de página de código.
Lista de verificação de ajuste
- Defina o menor
ImageResolutionque sua UX aceita. - Mantenha
CachePagesativado para visualização interativa; desativado para cenários de passagem única ou alta concorrência. - Feche sessões explicitamente; reduza
TimeOutonde o uso é intermitente. - Use
LargeDoc+AutoLoad = falsepadrão no cliente para documentos grandes. - Use
DefaultRender = falsesomente quando precisar de uma projeção PDF contendo texto.
Esta página foi útil?