Performance-Optimierung
Rendern und Speicher optimieren
Das Ressourcenprofil von Doconut wird von drei Dingen dominiert: Render‑DPI, was im Cache bleibt und wie lange Sitzungen leben. Dieser Leitfaden führt die Stellschrauben in Reihenfolge ihrer Wirkung auf.
Auflösung — der größte Hebel
ImageResolution (25–300 DPI) bestimmt sowohl die Renderzeit als auch die Bildgröße. Die meisten Formate verwenden standardmäßig 200 DPI; Bilder und PSD standardmäßig 100.
// A document list preview doesn't need print quality
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });Eine Halbierung der DPI reduziert die Pixelanzahl pro Seite etwa um ein Viertel — schnellere Renderings, kleinere Übertragungen, weniger Cache‑Speicher. Reservieren Sie 250–300 DPI für stark gezoomte Anwendungsfälle (CAD, technische Zeichnungen).
Bei PDFs mit umfangreichen eingebetteten Bildern fügt PdfConfig feinere Stellschrauben hinzu: CompressImages + CompressQuality, ResizeImages + ResizeResolution und CompressFast. Für reine Bilder begrenzt ImageConfig.MaxImagePixelSize (standardmäßig 3000 px) die Ausgabengröße.
Seiten‑Caching — Speicher vs. Neu‑Rendern
BaseConfig.CachePages (standardmäßig true) speichert jede gerenderte Seite im Speicher für die gesamte Sitzungsdauer. Das ist die richtige Voreinstellung für interaktives Betrachten — Nutzer scrollen vor und zurück. Deaktivieren Sie es, wenn:
- Dokumente sehr groß sind und einmal von Anfang bis Ende betrachtet werden,
- viele gleichzeitige Sitzungen die zwischengespeicherten Seiten vervielfachen würden,
- Sie lieber CPU pro Ansicht bezahlen möchten, anstatt RAM zu belegen.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });Auf dem Client pre‑lädt ViewerConfig.CacheEnabled = true ein kleines, sich bewegendes Fenster von kommenden Seitenbildern im Browser‑Speicher. Es handelt sich um einen per‑View‑Prefetch‑Cache, nicht um persistentes localStorage.
Sitzungen — der Speicher, den Sie nicht sehen
Jede offene Sitzung hält das geparste Dokumentmodell plus (bei aktivem CachePages) die gerenderten Seiten, bis das gleitende TimeOut (standardmäßig 60 Minuten) seit der letzten Anforderung abläuft. Zwei Gewohnheiten halten dies unter Kontrolle:
- Schließen Sie, was Sie nicht mehr benötigen.
viewer.CloseDocument(token)gibt die Engine sofort frei, anstatt das Leerlauffenster abzuwarten. - Passen Sie das Timeout an. Eine Vorschau, die Nutzer für zwei Minuten ansehen, benötigt keine einstündige Sitzung:
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });Beachten Sie den Kompromiss: Nach Ablauf zeigt das Widget Document session not found. Please re-open document. — wählen Sie ein Timeout, das zu realen Lesesitzungen passt.
Format‑spezifische Schalter
- Excel:
MemoryOptimizationPreferenceist standardmäßig aktiviert und reduziert den Speicherverbrauch beim Rendern sehr großer Arbeitsmappen — lassen Sie es aktiviert, oder setzen Sie es auffalse, wenn Sie Speicher gegen einen kleinen Geschwindigkeitsvorteil eintauschen möchten;SheetNames/PrintAreabeschränken das Rendern auf das Wesentliche. - Redirect‑Modus hat Vorabkosten:
DefaultRender = falsekonvertiert das gesamte Dokument beim Öffnen in PDF. Das ermöglicht native textbasierte Suche, aber bei einem 500‑Seiten‑Dokument beinhaltet der Öffnungsaufruf diese Konvertierung — aktivieren Sie es nicht reflexartig. - Word/PPT unter Linux/Docker: fehlende Schriftarten verursachen langsames Fallback‑Probing und falsche Metriken; richten Sie
FontFoldersauf ein Verzeichnis mit Ihren Schriftarten aus. - Präsentationen unter Linux/macOS: PPT/PPTX/PPS/POT/ODP‑Dateien können geöffnet werden, aber das Rendern mit der aktuellen Präsentations‑Engine erfordert das native
libgdiplusund den Laufzeit‑SchalterSystem.Drawing.EnableUnixSupport=true. Andere Formatfamilien nutzen den normalen plattformübergreifenden Rendering‑Pfad.
Client‑seitige Strategien
LargeDoc = true— Lazy‑Load‑Strategie für sehr große Dokumente; Seiten werden geladen, sobald der Nutzer ihnen näher kommt.AutoLoad = false(standardmäßig) — nicht rendern, bis Sie tatsächlichView(token)aufrufen.ShowThumbs = false— die Thumbnail‑Erstellung/-Anfragen bei einseitigen oder eingebetteten Vorschaubildern überspringen.- Das Aktivieren von
FixedZoomverhindert freie Zoom‑Änderungen; wenn Sie ein C#ViewerConfigabbilden, passen SieFixedZoomPercentMobile(C#‑Standard 75) für kleine Bildschirme an.
Einmalig starten, nicht pro Anfrage
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) gehört in Program.cs — das Registrieren von Encodings pro Anfrage ist unnötige Arbeit; das vollständige Vergessen führt dazu, dass Dokumente mit alten Codepages nicht mehr funktionieren.
Eine Optimierungs‑Checkliste
- Stellen Sie die niedrigste
ImageResolutionein, die Ihr UX akzeptiert. - Lassen Sie
CachePagesfür interaktives Betrachten aktiviert; deaktivieren Sie es für Einmal‑Durchläufe oder Szenarien mit hoher Parallelität. - Schließen Sie Sitzungen explizit; verkürzen Sie
TimeOut, wenn die Nutzung sprunghaft ist. - Verwenden Sie
LargeDoc+ standardmäßigAutoLoad = falseauf dem Client für große Dokumente. - Verwenden Sie
DefaultRender = falsenur, wenn Sie eine textbasierte PDF‑Projection benötigen.
War diese Seite hilfreich?