Optimisation de l'utilisation de la mémoire dans les applications de visualisation de documents à grande échelle
← Back to Blog9 min read

Optimisation de l'utilisation de la mémoire dans les applications de visualisation de documents à grande échelle

Optimisation de l'utilisation de la mémoire dans les visualiseurs de documents .NET à grande échelle avec Doconut
Optimisation de l'utilisation de la mémoire dans les visualiseurs de documents .NET à grande échelle avec Doconut

Vous avez des milliers de PDF, de fichiers Office ou de dessins CAD à afficher dans un portail basé sur .NET ? Et vous ne voulez pas que votre serveur manque de RAM ? L'astuce consiste à combiner le streaming paresseux, des plugins ciblés et le pipeline de rendu optimisé de Doconut. Dans les sections suivantes, nous passerons en revue les maux de tête liés à la mémoire qui surgissent dans les applications d’entreprise à forte charge documentaire, puis nous montrerons comment Doconut—le visualiseur de documents universel pour les back‑ends .NET—élève les goulets d’étranglement qui empêchent les visualiseurs traditionnels de s’adapter. Oh, et un essai gratuit vous attend si vous souhaitez voir les gains dans votre propre configuration.


Comprendre la pression mémoire dans les visualiseurs de documents .NET

Les grands portails de documents chargent souvent un fichier entier en mémoire avant même que la première page n’apparaisse. Un dessin CAD de 200 Mo ou un PDF de 500 pages peut rapidement submerger le ramasse‑miettes .NET, déclencher des pauses GC complètes et vous obliger à surdimensionner vos serveurs.

Pourquoi le modèle de rendu .NET par défaut nuit à l’évolutivité

SymptômeCause typique dans les implémentations naïves
Exceptions d'épuisement de mémoireTableaux d'octets du fichier entier conservés dans un cache statique
Chargement lent de la première pageDécodage de l'ensemble du document avant le rendu
Privation du pool de threadsLe rendu lié au CPU de longue durée bloque les pipelines asynchrones
Pics de latence imprévisiblesCollecte du GC d'objets volumineux épinglés

Ajoutez des plugins d'annotation ou d'OCR qui accumulent des bitmaps d'images, et la pression se multiplie. Le point idéal est de traiter uniquement ce dont l'utilisateur a besoin à l'instant et de garder chaque tampon intermédiaire de courte durée.

La réponse de Doconut : un noyau léger et optimisé en dépendances

L'architecture basée sur .NET 6 de Doconut a été reconstruite pour réduire les allocations sur le tas :

  • Optimisation des dépendances – la bibliothèque ne charge que les modules de rendu requis pour le type de fichier actuel (PDF, Office, CAD, image). Les plugins inutilisés restent hors de la mémoire, maintenant une empreinte processus minuscule.
  • Conception stream‑first – les fichiers sont ouverts en tant que flux, pas en tant que tableaux d'octets complets, ce qui permet à l'exécution de paginer les données depuis le disque à la demande.
  • Support des tâches en arrière‑plan – les tâches de conversion lourdes peuvent être déléguées à des processus workers ou à Azure Functions, libérant la couche web pour la visualisation interactive.

Lorsque vous alignez le visualiseur avec les modèles asynchrones de .NET, Doconut vous permet de servir des milliers de sessions concurrentes sur un cluster de VM modeste.


Comment activer le chargement paresseux

  1. Enregistrer le middleware de Doconut dans votre pipeline ASP.NET Core. Le middleware intercepte les requêtes du visualiseur et injecte les services nécessaires.
  2. Ouvrir les documents en tant que flux plutôt que de charger le fichier complet. La méthode OpenDocument de Doconut accepte un chemin de fichier ou un flux et renvoie un jeton représentant le document ouvert.
  3. Demander les pages à la demande depuis le côté client. Lorsque le front‑end demande une page spécifique, Doconut lit uniquement les objets requis, rend l'image raster et renvoie une vignette légère.

Comme le visualiseur fonctionne avec des flux, vous pouvez conserver les fichiers dans Azure Blob Storage, Amazon S3 ou un NAS sur site sans les copier sur le disque local du serveur web. Le système d'exploitation gère le paging, et le runtime .NET ne conserve que les petits tampons nécessaires à la page active.

Avantages pour les déploiements à grande échelle

AvantageComment Doconut y parvient
Utilisation de RAM prévisibleCache de pages de taille fixe + accès uniquement en flux
Rendu rapide de la première pageLit uniquement l’en‑tête du document et les objets de la première page
Évolutif sur tous les navigateursLa même logique basée sur les flux fonctionne pour les front‑ends HTML5/React, Angular ou Vue
Pression GC réduitePas de grands tableaux d'octets épinglés ; tous les tampons sont de courte durée

Combinez le chargement paresseux avec des tâches de conversion en arrière‑plan, et la couche web ne se bloque jamais lors de transformations gourmandes en CPU.


Plugins d'annotation et d'OCR .NET sans surcharge excessive

Les entreprises apprécient l'annotation et l'OCR consultable, mais une approche naïve conserve un bitmap en pleine résolution de chaque page en mémoire simplement pour dessiner des surlignages ou exécuter la reconnaissance de texte. Le modèle de plugins de Doconut isole ces fonctionnalités dans des services indépendants et à la demande.

Annotation – gestion légère, par page

Lorsqu'une page est chargée, vous pouvez récupérer un gestionnaire d'annotation qui ne conserve que les données vectorielles (coordonnées, style, notes). Ajouter un tampon ou un surlignage met à jour ce stockage vectoriel ; le bitmap sous‑jacent n'est jamais dupliqué. Doconut re‑rend la page avec la superposition uniquement lorsque le client le demande, de sorte qu'un PDF de 500 pages avec des milliers d'annotations ne consomme qu'une fraction de la mémoire qu'exigerait une solution centrée sur les bitmaps.

OCR – extraction de texte à la volée

Le plugin de recherche exécute l'OCR uniquement sur les pages que l'utilisateur fait défiler. Vous configurez la résolution d'image souhaitée (par ex., 200 dpi) dans les options du document, et Doconut extrait le texte pour la page actuelle, stockant le résultat dans un index compressé lié au jeton du document. Le processus OCR est découplé du rendu, vous permettant de le faire évoluer horizontalement (par ex., via Azure Functions) sans gonfler l'empreinte mémoire du serveur web qui sert le visualiseur.

Pourquoi cela importe pour les grandes entreprises

  • Coût prévisible – l'annotation et l'OCR s'exécutent par page, pas par document, maintenant une utilisation de la mémoire linéaire au contenu visible.
  • Conformité prête – les annotations sont stockées en XML, facilitant les audits ou les censures.
  • Sécurité multi‑locataire – le jeton de chaque locataire isole son index OCR, empêchant les fuites de données entre locataires.

Conversion côté serveur et impression contrôlée : garder les charges de travail efficaces

De nombreux portails doivent convertir des fichiers Office, des dessins CAD ou des messages électroniques en PDF ou formats image pour un rendu uniforme. Un piège courant consiste à effectuer la conversion en‑processus, ce qui fait exploser la RAM et le CPU pendant que l'utilisateur attend. Le plugin de conversion de Doconut délègue la charge lourde à un service côté serveur que vous pouvez faire évoluer horizontalement.

Convertir sans charger le fichier source complet

L'API de conversion accepte les chemins source et cible (ou des flux) et fonctionne de manière flux, de sorte que le fichier source n'est jamais entièrement matérialisé en mémoire. Une fois le PDF (ou autre format cible) prêt, le visualiseur l'ouvre en utilisant la même technique de chargement paresseux décrite précédemment.

Impression contrôlée – éviter la rasterisation du document complet

Lors de l'impression de gros PDF, Doconut diffuse les tâches d'impression page par page vers le pilote d'imprimante. Cette approche vous permet d'appliquer des quotas ou des filigranes sans jamais charger le document complet en RAM.

Mise à l'échelle de niveau entreprise

ScénarioTechnique d'économie de mémoire de Doconut
Conversion par lots de 10 000 fichiers OfficeUtiliser des workers en arrière‑plan avec conversion basée sur les flux ; chaque worker traite un fichier à la fois, maintenant la RAM basse.
Impression à la demande de dessins CAD à 5 chiffresImprimer via flux de page ; aucun raster complet du dessin requis.
Portail SaaS multi‑locataireSéparer les files de conversion par locataire ; l'isolation mémoire est automatique car chaque tâche travaille sur son propre flux.

Bonnes pratiques pour faire évoluer Doconut dans les environnements d'entreprise

Même avec un moteur efficace en mémoire, les déploiements en conditions réelles nécessitent quelques garde‑fous. Voici des pratiques éprouvées qui amplifient les forces intégrées de Doconut.

1. Limiter la taille du cache de pages par session

Configurez le visualiseur pour ne conserver en mémoire que les pages les plus récentes. Réduire la taille du cache diminue directement la consommation de RAM par session.

2. Exécuter l'OCR et la conversion dans des micro‑services isolés

Déployez le plugin de recherche et le plugin de conversion comme conteneurs séparés derrière une file de messages (RabbitMQ, Azure Service Bus, etc.). Cela isole les pics de mémoire et vous permet d'autoscaler chaque composant indépendamment.

3. Activer le Trim et le ReadyToRun de .NET 6

Lors de la publication de votre API propulsée par Doconut, activez le trimming pour éliminer le IL inutilisé et réduire l'empreinte du binaire :

dotnet publish -c Release -r win-x64 --self-contained true /p:PublishTrimmed=true

Un binaire plus petit signifie un ensemble de travail plus réduit, ce qui se traduit par moins de RAM par conteneur.


Conclusion

Optimiser l'utilisation de la mémoire est essentiel pour toute solution de visualisation de documents à grande échelle. En tirant parti de l'architecture stream‑first de Doconut, de son noyau optimisé en dépendances et de ses plugins d'annotation/OCR à la demande, vous pouvez garder une consommation de RAM prévisible tout en offrant des expériences de visualisation rapides et réactives. Déployez les modèles de bonnes pratiques recommandés — cache de jetons distribué, cache de pages limité, isolation en micro‑services et builds allégés—et vous débloquerez le plein potentiel d'évolutivité de Doconut.

Prêt à voir la différence par vous-même ? Commencez votre essai gratuit de Doconut dès aujourd'hui et découvrez la visualisation de documents à faible consommation de mémoire et haute performance dans vos applications .NET.

#document viewer#performance#.NET#enterprise#Doconut#visualiseur de documents#entreprise