Ajuste de Performance
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 permanecem vivas. 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 como padrão 200 DPI; imagens e PSD têm como padrão 100.
// A document list preview doesn't need print quality
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });Reduzir o DPI pela metade diminui aproximadamente a contagem de pixels por página em um quarto — 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áginas — 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 início ao fim,
- muitas sessões simultâneas multiplicariam as páginas em cache,
- você prefere gastar CPU por visualização a manter RAM ocupada.
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 requisição. Dois hábitos mantêm isso sob controle:
- Feche o que você terminou.
viewer.CloseDocument(token)libera o motor imediatamente ao invés de aguardar a janela ociosa. - Ajuste corretamente o tempo limite. 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 exibe 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-o ativado, ou defina comofalsese quiser trocar memória por um pequeno ganho de velocidade;SheetNames/PrintArearestringem a renderização ao que importa. - Modo de redirecionamento tem um custo inicial:
DefaultRender = falseconverte o documento inteiro para PDF no momento da abertura. Isso permite busca nativa baseada em texto, mas em um documento de 500 páginas a chamada de abertura carrega essa conversão — não habilite reflexivamente. - Word/PPT no Linux/Docker: fontes ausentes causam sondagem lenta de fallback 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 opção de runtimeSystem.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— ignore a geração/solicitação de miniaturas para pré-visualizações de página única ou incorporadas.- Habilitar
FixedZoomevita alterações de zoom livres; ao mapear umViewerConfigem C#, ajusteFixedZoomPercentMobile(padrão C# 75) para telas pequenas.
Inicialize uma vez, não por requisição
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) deve estar em Program.cs — registrar codificações por requisição é trabalho desperdiçado; esquecê-lo completamente quebra documentos legados de página de código.
Uma lista de verificação de ajuste
- Defina a menor
ImageResolutionque sua UX aceita. - Mantenha
CachePagesativado para visualização interativa; desative 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 com texto.
Esta página foi útil?