Βελτιστοποίηση Απόδοσης

Βελτιστοποίηση απόδοσης και μνήμης

Το προφίλ πόρων του Doconut κυριαρχείται από τρία πράγματα: render DPI, what stays cached, και how long sessions live. Αυτός ο οδηγός περιγράφει τις ρυθμίσεις με τη σειρά της επίδρασής τους.

Ανάλυση — ο μεγαλύτερος μοχλός

ImageResolution (25–300 DPI) καθορίζει τόσο το χρόνο απόδοσης όσο και το μέγεθος της εικόνας. Τα περισσότερα φορμάτ έχουν προεπιλογή 200 DPI· οι εικόνες και τα PSD έχουν προεπιλογή 100.

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

Η μείωση του DPI στο μισό μειώνει περίπου στο τέταρτο τον αριθμό εικονοστοιχείων ανά σελίδα — ταχύτερη απόδοση, μικρότερες μεταφορές, λιγότερη μνήμη προσωρινής αποθήκευσης. Κρατήστε 250–300 DPI για περιπτώσεις χρήσης με έντονο ζουμ (CAD, τεχνικά σχέδια).

Για PDF με έντονη ενσωματωμένη εικονογράφηση, το PdfConfig προσθέτει πιο λεπτές ρυθμίσεις: CompressImages + CompressQuality, ResizeImages + ResizeResolution, και CompressFast. Για απλές εικόνες, το ImageConfig.MaxImagePixelSize (προεπιλογή 3000 εικ. px) περιορίζει το μέγεθος εξόδου.

Προσωρινή αποθήκευση σελίδων — μνήμη vs. επανα-απόδοση

BaseConfig.CachePages (προεπιλογή true) διατηρεί κάθε αποδοθείσα σελίδα στη μνήμη για τη διάρκεια της συνεδρίας. Αυτό είναι η σωστή προεπιλογή για διαδραστική προβολή — οι χρήστες κυλούν μπρος-πίσω. Απενεργοποιήστε το όταν:

  • τα έγγραφα είναι τεράστια και προβάλλονται μία φορά, από την αρχή μέχρι το τέλος,
  • πολλές ταυτόχρονες συνεδρίες θα πολλαπλασιάσουν τις αποθηκευμένες σελίδες,
  • προτιμάτε να καταναλώνετε CPU ανά προβολή αντί να κρατάτε RAM.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

Στον πελάτη, ViewerConfig.CacheEnabled = true προφορτώνει ένα μικρό κυλιόμενο παράθυρο από επερχόμενες εικόνες σελίδων στη μνήμη του προγράμματος περιήγησης. Είναι προσωρινή αποθήκευση προφόρτωσης ανά προβολή, όχι μόνιμο localStorage.

Συνεδρίες — η μνήμη που δεν βλέπετε

Κάθε ανοιχτή συνεδρία κρατά το αναλυμένο μοντέλο εγγράφου συν (με CachePages) τις αποδοθείσες σελίδες της, μέχρι να λήξει το κυλιόμενο TimeOut (προεπιλογή 60 λεπτά) από το τελευταίο αίτημα. Δύο συνήθειες το διατηρούν υπό έλεγχο:

  • Κλείστε ό,τι έχετε τελειώσει. viewer.CloseDocument(token) ελευθερώνει τη μηχανή αμέσως αντί να περιμένει το παράθυρο αδράνειας.
  • Ρυθμίστε σωστά το χρονικό όριο. Μια προεπισκόπηση που οι χρήστες ρίχνουν μια ματιά για δύο λεπτά δεν χρειάζεται συνεδρία μιας ώρας:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Θυμηθείτε την ανταλλαγή: μετά τη λήξη το widget εμφανίζει Document session not found. Please re-open document. — επιλέξτε ένα χρονικό όριο που ταιριάζει στις πραγματικές συνεδρίες ανάγνωσης.

Ρυθμίσεις ανά τύπο αρχείου

  • Excel: Το MemoryOptimizationPreference είναι ενεργό από προεπιλογή και μειώνει το αποτύπωμα μνήμης κατά την απόδοση πολύ μεγάλων βιβλίων εργασίας — αφήστε το ενεργό, ή ορίστε το σε false αν θέλετε να ανταλλάξετε μνήμη για μικρή αύξηση ταχύτητας· τα SheetNames / PrintArea περιορίζουν την απόδοση σε ό,τι είναι σημαντικό.
  • Η λειτουργία ανακατεύθυνσης έχει προκαταβολικό κόστος: το DefaultRender = false μετατρέπει ολόκληρο το έγγραφο σε PDF κατά το άνοιγμα. Παρέχει εγγενή αναζήτηση κειμένου, αλλά σε έγγραφο 500 σελίδων η κλήση ανοίγματος φέρνει αυτή τη μετατροπή — μην το ενεργοποιείτε αυτόματα.
  • Word/PPT σε Linux/Docker: η έλλειψη γραμματοσειρών προκαλεί αργή αναζήτηση εναλλακτικών και λανθασμένα μετρικά· ορίστε το FontFolders σε έναν φάκελο με τις γραμματοσειρές σας.
  • Παρουσιάσεις σε Linux/macOS: τα αρχεία PPT/PPTX/PPS/POT/ODP μπορούν να ανοίξουν, αλλά η απόδοση με την τρέχουσα μηχανή παρουσίασης απαιτεί το εγγενές libgdiplus και τη ρύθμιση χρόνου εκτέλεσης System.Drawing.EnableUnixSupport=true. Άλλες οικογένειες μορφών χρησιμοποιούν τη συνήθη δια-πλατφορμική διαδρομή απόδοσης.

Στρατηγικές στην πλευρά του πελάτη

  • LargeDoc = true — στρατηγική lazy-load για πολύ μεγάλα έγγραφα· οι σελίδες φορτώνονται καθώς ο χρήστης τις προσεγγίζει.
  • AutoLoad = false (προεπιλογή) — μην αποδίδετε μέχρι να καλέσετε πραγματικά το View(token).
  • ShowThumbs = false — παραλείψτε τη δημιουργία/αίτηση μικρογραφιών για μονό-σελίδα ή ενσωματωμένες προεπισκοπήσεις.
  • Η ενεργοποίηση του FixedZoom αποτρέπει τις ελεύθερες αλλαγές ζουμ· όταν χαρτογραφείτε ένα C# ViewerConfig, ρυθμίστε το FixedZoomPercentMobile (προεπιλογή C# 75) για μικρές οθόνες.

Εκκίνηση μία φορά, όχι ανά αίτημα

Το Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) ανήκει στο Program.cs — η καταχώρηση κωδικοποιήσεων ανά αίτημα είναι χαμένη εργασία· η πλήρης παράλειψή του διασπά έγγραφα κωδικοποίησης κληρονομιάς.

Λίστα ελέγχου βελτιστοποίησης

  1. Ορίστε το χαμηλότερο ImageResolution που αποδέχεται η εμπειρία χρήστη (UX).
  2. Διατηρήστε το CachePages ενεργό για διαδραστική προβολή· απενεργοποιήστε το για μονοδιάστατες ή υψηλής ταυτόχρονης χρήσης περιπτώσεις.
  3. Κλείστε τις συνεδρίες ρητά· μειώστε το TimeOut όταν η χρήση είναι σποραδική.
  4. Χρησιμοποιήστε LargeDoc + προεπιλογή AutoLoad = false στον πελάτη για μεγάλα έγγραφα.
  5. Χρησιμοποιήστε DefaultRender = false μόνο όταν χρειάζεστε μια προβολή PDF με κείμενο.

Ήταν αυτή η σελίδα χρήσιμη;