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 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 padrão de 200 DPI; imagens e PSD têm padrão de 100.

csharp
// Uma pré‑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 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 intensas, 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 ao invés de ocupar RAM.
csharp
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 futuras 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 o período ocioso.
  • 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:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Lembre‑se da troca: após a expiração o widget exibe Sessão de documento não encontrada. Por favor, reabra o documento. — escolha um tempo limite que corresponda às sessões reais de leitura.

Alternativas específicas de formato

  • Excel: MemoryOptimizationPreference está ativado por padrão e reduz a pegada de memória ao renderizar planilhas muito grandes — deixe ativado, ou defina como false se quiser trocar memória por um pequeno ganho de velocidade; SheetNames / PrintArea restringem a renderização ao que importa.
  • O modo de redirecionamento tem um custo inicial: DefaultRender = false converte 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 FontFolders para 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 libgdiplus nativo e a opção de tempo de execução System.Drawing.EnableUnixSupport=true. Outras famílias de formato usam o caminho de renderização multiplataforma normal.

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 chame View(token).
  • ShowThumbs = false — pula a geração/solicitação de miniaturas para pré‑visualizações de página única ou incorporadas.
  • Habilitar FixedZoom evita alterações de zoom livres; ao mapear um ViewerConfig em C#, ajuste FixedZoomPercentMobile (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 ajustes

  1. Defina a menor ImageResolution que sua UX aceita.
  2. Mantenha CachePages ativado para visualização interativa; desative para cenários de passagem única ou alta concorrência.
  3. Feche sessões explicitamente; reduza TimeOut onde o uso é intermitente.
  4. Use LargeDoc + AutoLoad = false padrão no cliente para documentos grandes.
  5. Use DefaultRender = false somente quando precisar de uma projeção PDF contendo texto.

Esta página foi útil?