Prestandaoptimering
Optimera rendering och minne
Doconuts resursprofil domineras av tre saker: render DPI, vad som förblir cachat, och hur länge sessioner lever. Den här guiden 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.
// En förhandsgranskning av dokumentlistan behöver inte utskriftskvalitet
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 zoomtunga användningsfall (CAD, ingenjörsritningar).
För PDF-filer med tung inbäddad grafik lägger PdfConfig till finare justeringar: 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:
- dokumenten ä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.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });På klienten förhandsladdar ViewerConfig.CacheEnabled = true ett litet rörligt fönster av kommande sidbilder i webbläsarens minne. Det är en per-visning förhandsladdningscache, 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å den inaktiva perioden. - Anpassa timeouten rätt. En förhandsvisning som användare tittar på i två minuter behöver inte en timmes session:
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 minnesavtrycket när mycket stora arbetsböcker renderas — låt den vara på, eller sätt den tillfalseom du vill byta minne mot en liten hastighetsökning;SheetNames/PrintAreabegränsar rendering till det som är viktigt. - Omdirigeringsläge har en initial kostnad:
DefaultRender = falsekonverterar hela dokumentet till PDF vid öppning. Det ger inbyggd textbaserad sökning, men på ett 500‑sidigt dokument innebär öppningsanropet den konverteringen — aktivera det inte reflexivt. - Word/PowerPoint på en server utan dokumentens typsnitt: en Windows Server utan Office har mycket färre typsnitt än en utvecklingsmaskin. Saknade typsnitt orsakar långsam fallback‑sökning och felaktiga mått; installera typsnitten, eller peka
FontFolderspå en mapp som innehåller dem.
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 anroparView(token).ShowThumbs = false— hoppa över miniatyrgenerering/-förfrågningar för enkelsidiga eller inbäddade förhandsvisningar.- Att aktivera
FixedZoomundviker fria zoomändringar; när du mappar en C#ViewerConfig, justeraFixedZoomPercentMobile(C# standard 75) för små skärmar.
Starta en gång, inte per begäran
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) hör hemma i Application_Start, bredvid DoconutHost.Initialize — att registrera kodningar per begäran är slöseri; att glömma det helt och hållet förstör äldre kodsidokument.
Det första dokumentet efter en start
Doconut laddar sina dokumentmotorer första gången ett dokument öppnas i en applikation — efter att poolen startat, efter varje återvinning, och i varje ny applikationsdomän. Den första öppningen är långsammare än de efterföljande, och realtidsantivirus kan göra den mycket långsammare: motorerna laddas från minnet, och Microsoft Defender skannar koden när den laddas. Ett mappundantag hjälper inte, eftersom ingen fil är inblandad.
Mätt på en 4‑kärnig Windows Server 2022‑maskin, öppning av ett tvåsidigt Word‑dokument:
| Första dokumentet | Varje dokument efter det | |
|---|---|---|
| Defender realtidsskydd på | ca 70 s | 0.3–7.5 s, beroende på formatet |
| Defender realtidsskydd av | 12–15 s | 0.3–7.5 s, beroende på formatet |
Betala en gång, innan dina användare gör det:
- Behåll arbetsprocessen levande: sätt applikationspoolens Start Mode till
AlwaysRunning, och höj eller inaktivera dess idle time-out, så att en tyst natt inte avladdar motorerna. - Värm upp den vid start: aktivera IIS Application Initialization (
preloadEnabled="true"på webbplatsen) och peka dessinitializationPagepå en av dina sidor som öppnar ett litet dokument. Den första riktiga användaren hittar då motorerna redan laddade. - Ge den första begäran tid: en lastbalanserares hälsokontroll eller en uppströmsproxy med kort timeout kan ge upp på en kall start som annars skulle ha lyckats.
Om du ska ändra antivirusinställningar på en server är ditt säkerhetsteams beslut; uppvärmningen ovan fungerar utan det.
Applikationspoolen
På en enskild server lever dokumentsessioner och cachade sidor i arbetsprocessen. Varje återvinning av applikationspoolen — den schemalagda, en ändring av Web.config, eller poolens idle time-out (20 minuter som standard i IIS) — rensar dem alla, och öppna visare visar då Document session not found. Please re-open document.
- Justera poolens idle time-out och återvinningsschema efter hur länge dina användare faktiskt läser, eller var beredd att öppna dokument igen efter en återvinning.
- Kör poolen som en 64‑bit process (lämna Enable 32-Bit Applications av). Stora dokument behöver det adressutrymme som en 32‑bit arbetsprocess saknar.
- En webbfarm håller sessioner i en delad lagring, så en återvinning på en nod förlorar dem inte — se Sessioner & Säkerhet.
En optimeringschecklista
- Ställ in den lägsta
ImageResolutionsom din UX accepterar. - Behåll
CachePagespå för interaktiv visning; av för engångs- eller högkonkurrensscenarier. - Stäng sessioner explicit; förkorta
TimeOutdär användningen är burstig. - Använd
LargeDoc+ standardAutoLoad = falsepå klienten för stora dokument. - Använd
DefaultRender = falseendast när du behöver en textbärande PDF‑projektion.
Var den här sidan hjälpsam?