Performance-Optimierung

Rendering 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 der Reihenfolge ihrer Wirkung auf.

Auflösung — die wichtigste Stellschraube

ImageResolution (25–300 DPI) beeinflusst sowohl die Renderzeit als auch die Bildgröße. Die meisten Formate haben standardmäßig 200 DPI; Bilder und PSD haben standardmäßig 100.

csharp
// 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 zoom‑intensive Anwendungsfälle (CAD, technische Zeichnungen).

Bei PDFs mit vielen eingebetteten Bildern bietet PdfConfig feinere Stellschrauben: 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 für die gesamte Lebensdauer der Sitzung im Speicher. Das ist die richtige Voreinstellung für interaktives Betrachten — Benutzer scrollen vor und zurück. Deaktivieren Sie es, wenn:

  • Dokumente sehr groß sind und einmal von vorne bis hinten betrachtet werden,
  • viele gleichzeitige Sitzungen die zwischengespeicherten Seiten vervielfachen würden,
  • Sie lieber CPU pro Ansicht verbrauchen möchten, anstatt RAM zu belegen.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

Auf der Client‑Seite lädt ViewerConfig.CacheEnabled = true ein kleines, sich bewegendes Fenster von kommenden Seitenbildern im Browser‑Speicher vor. Es handelt sich um einen per‑Ansicht‑Prefetch‑Cache, nicht um ein dauerhaftes localStorage.

Sitzungen — der Speicher, den Sie nicht sehen

Jede geöffnete Sitzung hält das geparste Dokumentmodell plus (bei aktivem CachePages) seine 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 angemessen an. Eine Vorschau, die Benutzer für zwei Minuten betrachten, benötigt keine einstündige Sitzung:
csharp
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: MemoryOptimizationPreference ist standardmäßig aktiviert und reduziert den Speicherverbrauch beim Rendern sehr großer Arbeitsmappen — lassen Sie es aktiviert, oder setzen Sie es auf false, wenn Sie Speicher gegen einen kleinen Geschwindigkeitsgewinn eintauschen möchten; SheetNames / PrintArea beschränken das Rendering auf das Wesentliche.
  • Der Weiterleitungsmodus hat anfängliche Kosten: DefaultRender = false konvertiert das gesamte Dokument beim Öffnen in PDF. Das ermöglicht native textbasierte Suche, aber bei einem 500‑Seiten‑Dokument führt der Öffnungsaufruf diese Konvertierung aus — aktivieren Sie es nicht reflexartig.
  • Word/PPT unter Linux/Docker: Fehlende Schriften verursachen langsames Fallback‑Probing und falsche Metriken; richten Sie FontFolders auf ein Verzeichnis mit Ihren Schriften aus.
  • Präsentationen unter Linux/macOS: PPT/PPTX/PPS/POT/ODP‑Dateien können geöffnet werden, aber das Rendering mit der aktuellen Präsentations‑Engine erfordert das native libgdiplus und den Laufzeit‑Schalter System.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, wenn der Benutzer ihnen näher kommt.
  • AutoLoad = false (Standard) — nicht rendern, bis Sie tatsächlich View(token) aufrufen.
  • ShowThumbs = false — Thumbnail‑Erstellung/-Anfragen für einseitige oder eingebettete Vorschauen überspringen.
  • Das Aktivieren von FixedZoom verhindert freie Zoom‑Änderungen; wenn Sie ein C# ViewerConfig abbilden, passen Sie FixedZoomPercentMobile (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 komplette Vergessen führt dazu, dass ältere Code‑Page‑Dokumente nicht mehr funktionieren.

Eine Optimierungs‑Checkliste

  1. Stellen Sie die niedrigste ImageResolution ein, die Ihre UX akzeptiert.
  2. Lassen Sie CachePages für interaktives Betrachten aktiviert; deaktivieren Sie es für Einmal‑Durchläufe oder Szenarien mit hoher Parallelität.
  3. Schließen Sie Sitzungen explizit; verkürzen Sie TimeOut, wenn die Nutzung sprunghaft ist.
  4. Verwenden Sie LargeDoc + standardmäßig AutoLoad = false auf dem Client für große Dokumente.
  5. Verwenden Sie DefaultRender = false nur, wenn Sie eine textbasierte PDF‑Projektion benötigen.

War diese Seite hilfreich?