Prestandaoptimering

Optimera rendering och minne

Doconuts resursprofil domineras av tre saker: render DPI, vad som hålls i cache, och hur länge sessioner lever. Denna guide går igenom reglagen i ordning efter påverkan.

Upplösning — det största reglaget

ImageResolution (25–300 DPI) styr både renderingtiden och bildstorleken. De flesta format har standard 200 DPI; bilder och PSD har standard 100.

csharp
// A document list preview doesn't need print quality
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });

Att halvera DPI minskar ungefär pixelantalet per sida till en fjärdedel — snabbare rendering, mindre överföringar, mindre cacheminne. Reservera 250–300 DPI för zoomintensiva användningsfall (CAD, ingenjörsritningar).

För PDF-filer med tung inbäddad grafik lägger PdfConfig till finare reglage: CompressImages + CompressQuality, ResizeImages + ResizeResolution och CompressFast. För enkla bilder begränsar ImageConfig.MaxImagePixelSize (standard 3000 px) utskriftsstorleken.

Sidcachning — minne vs. återrendering

BaseConfig.CachePages (standard true) behåller varje renderad sida i minnet under sessionens livstid. Det är rätt standard för interaktiv visning — användare scrollar fram och tillbaka. Stäng av den när:

  • dokument är enorma och visas en gång, från början till slut,
  • många samtidiga sessioner skulle multiplicera de cachade sidorna,
  • du föredrar att betala CPU per visning snarare än att hålla RAM.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

På klienten laddar ViewerConfig.CacheEnabled = true förhandsvis en liten rörlig fönster av kommande sidbilder i webbläsarens minne. Det är en per‑visning förhandscache, inte en bestående localStorage.

Sessioner — minnet du inte ser

Varje öppen session håller den analyserade dokumentmodellen plus (med CachePages) dess renderade sidor, tills den glidande TimeOut (standard 60 minuter) löper ut sedan den senaste begäran. Två vanor håller detta under kontroll:

  • Stäng det du är klar med. viewer.CloseDocument(token) frigör motorn omedelbart istället för att vänta på inaktivitetsfönstret.
  • Anpassa timeouten. En förhandsgranskning som användare tittar på i två minuter behöver inte en timmes session:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Kom ihåg avvägningen: efter utgången visar widgeten Document session not found. Please re-open document. — välj en timeout som matchar faktiska lässessioner.

Format‑specifika växlar

  • Excel: MemoryOptimizationPreference är på som standard och minskar minnesfotavtrycket vid rendering av mycket stora arbetsböcker — låt den vara på, eller sätt den till false om du vill byta minne mot en liten hastighetsökning; SheetNames / PrintArea begränsar rendering till det som är relevant.
  • Redirect‑läge har en initial kostnad: DefaultRender = false konverterar hela dokumentet till PDF vid öppning. Det möjliggör inbyggd textbaserad sökning, men på ett 500‑sidigt dokument innebär öppningsanropet den konverteringen — aktivera det inte reflexivt.
  • Word/PPT på Linux/Docker: saknade typsnitt orsakar långsam fallback‑probning och felaktiga mått; peka FontFolders på en katalog med dina typsnitt.
  • Presentationer på Linux/macOS: PPT/PPTX/PPS/POT/ODP‑filer kan öppnas, men rendering med den nuvarande presentationsmotorn kräver native libgdiplus och runtime‑växeln System.Drawing.EnableUnixSupport=true. Andra formatfamiljer använder den vanliga plattformsoberoende renderingsvägen.

Klientsidstrategier

  • LargeDoc = true — lat laddningsstrategi för mycket stora dokument; sidor laddas när användaren närmar sig dem.
  • AutoLoad = false (standard) — rendera inte förrän du faktiskt anropar View(token).
  • ShowThumbs = false — hoppa över miniatyrgenerering/-förfrågningar för enkeltsidiga eller inbäddade förhandsgranskningar.
  • Att aktivera FixedZoom undviker fria zoomändringar; när du mappar en C# ViewerConfig, justera FixedZoomPercentMobile (C#‑standard 75) för små skärmar.

Starta en gång, inte per begäran

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) bör ligga i Program.cs — att registrera kodningar per begäran är slöseri; att glömma det helt och hållet förstör äldre dokument med kodsidessidor.

En optimeringschecklista

  1. Ställ in den lägsta ImageResolution som din UX accepterar.
  2. Behåll CachePages på för interaktiv visning; av för engångs- eller högkonkurrensscenarier.
  3. Stäng sessioner explicit; förkorta TimeOut där användning är pulserande.
  4. Använd LargeDoc + standard AutoLoad = false på klienten för stora dokument.
  5. Använd DefaultRender = false endast när du behöver en textbärande PDF‑projektion.

Var den här sidan till hjälp?