Ottimizzare l'uso della memoria in applicazioni di visualizzazione di documenti su larga scala
← Back to Blog8 min read

Ottimizzare l'uso della memoria in applicazioni di visualizzazione di documenti su larga scala

Ottimizzare l'uso della memoria in visualizzatori di documenti .NET su larga scala con Doconut
Ottimizzare l'uso della memoria in visualizzatori di documenti .NET su larga scala con Doconut

Hai migliaia di PDF, file Office o disegni CAD da mostrare in un portale basato su .NET? E non vuoi che il tuo server esaurisca la RAM? Il trucco è mescolare lo streaming lazy, plugin mirati e la pipeline di rendering ottimizzata di Doconut. Nelle prossime sezioni vedremo i problemi di memoria che compaiono nelle app aziendali con grandi volumi di documenti, per poi mostrare come Doconut—il visualizzatore universale di documenti per back‑end .NET—superi i colli di bottiglia che impediscono la scalabilità dei visualizzatori tradizionali. Ah, e c’è una prova gratuita pronta se vuoi vedere i vantaggi nel tuo ambiente.


Comprendere la pressione sulla memoria nei visualizzatori di documenti .NET

I grandi portali di documenti spesso ingoiano un intero file in memoria prima che la prima pagina appaia. Un disegno CAD da 200 MB o un PDF di 500 pagine può rapidamente sovraccaricare il garbage collector di .NET, provocare pause di full‑GC e costringerti a sovradimensionare i server.

Perché il modello di rendering predefinito di .NET ostacola la scalabilità

SintomoCausa tipica in implementazioni ingenue
Eccezioni Out‑of‑memoryArray di byte dell’intero file mantenuti in una cache statica
Lenta apertura della prima paginaDecodifica dell’intero documento prima del rendering
Saturazione del thread‑poolBlocchi di rendering CPU‑intensivi che bloccano le pipeline asincrone
Picchi di latenza imprevedibiliRaccolta GC di grandi oggetti pinati

Aggiungi plugin di annotazione o OCR che accumulano bitmap di immagini, e la pressione si moltiplica. Il punto ideale è elaborare solo ciò di cui l’utente ha bisogno in quel momento e mantenere ogni buffer intermedio di breve durata.

La risposta di Doconut: un nucleo snello e ottimizzato per le dipendenze

L'architettura .NET 6 di Doconut è stata ricostruita per ridurre le allocazioni heap:

  • Ottimizzazione delle dipendenze – la libreria carica solo i moduli di rendering richiesti per il tipo di file corrente (PDF, Office, CAD, immagine). I plugin inutilizzati rimangono fuori dalla memoria, mantenendo l’impronta del processo minima.
  • Design stream‑first – i file vengono aperti come stream, non come array di byte completi, così il runtime può paginare i dati dal disco su richiesta.
  • Supporto per job in background – attività di conversione pesanti possono essere delegate a processi worker o Azure Functions, lasciando il livello web libero per la visualizzazione interattiva.

Quando allinei il visualizzatore ai pattern asincroni di .NET, Doconut ti consente di servire migliaia di sessioni concorrenti su un modesto cluster di VM.

Come abilitare il caricamento lazy

  1. Registra il middleware di Doconut nella pipeline ASP.NET Core. Il middleware intercetta le richieste del visualizzatore e inietta i servizi necessari.
  2. Apri i documenti come stream invece di caricare l’intero file. Il metodo OpenDocument di Doconut accetta un percorso file o uno stream e restituisce un token che rappresenta il documento aperto.
  3. Richiedi le pagine on‑demand dal lato client. Quando il front‑end chiede una pagina specifica, Doconut legge solo gli oggetti richiesti, rende l’immagine raster e restituisce una miniatura leggera.

Poiché il visualizzatore lavora con stream, puoi mantenere i file in Azure Blob Storage, Amazon S3 o in un NAS on‑premise senza copiarli sul disco locale del server web. Il sistema operativo gestisce lo paging e il runtime .NET trattiene solo i piccoli buffer necessari per la pagina attiva.

Vantaggi per le distribuzioni su larga scala

VantaggioCome lo ottiene Doconut
Uso di RAM prevedibileCache di pagina a dimensione fissa + accesso solo stream
Rapida resa della prima paginaLegge solo l’intestazione del documento e gli oggetti della prima pagina
Scalabile su tutti i browserLa stessa logica basata su stream funziona per front‑end HTML5/React, Angular o Vue
Pressione GC ridottaNessun grande array di byte pinato; tutti i buffer sono di breve durata

Abbina il caricamento lazy a job di conversione in background, e il livello web non si blocca mai per trasformazioni CPU‑intensive.

Plugin .NET per annotazione e OCR senza sovraccarico

Le aziende amano annotazione e OCR ricercabile, ma un approccio ingenuo mantiene un bitmap a piena risoluzione di ogni pagina in memoria solo per disegnare evidenziazioni o eseguire il riconoscimento del testo. Il modello di plugin di Doconut isola queste funzionalità in servizi indipendenti, attivati su richiesta.

Annotazione – gestione leggera per pagina

Quando una pagina viene caricata, puoi recuperare un manager di annotazioni che contiene solo i dati vettoriali (coordinate, stile, note). L’aggiunta di un timbro o di un evidenziatore aggiorna questo store vettoriale; il bitmap sottostante non viene mai duplicato. Doconut riesegue il rendering della pagina con l’overlay solo quando il client lo richiede, così anche un PDF di 500 pagine con migliaia di annotazioni consuma solo una frazione della memoria rispetto a una soluzione basata su bitmap.

OCR – estrazione del testo al volo

Il Search Plugin esegue OCR solo sulle pagine che l’utente scorre. Configuri la risoluzione immagine desiderata (ad es., 200 dpi) nelle opzioni del documento, e Doconut estrae il testo per la pagina corrente, memorizzando il risultato in un indice compresso legato al token del documento. Il processo OCR è separato dal rendering, permettendoti di scalarlo orizzontalmente (ad es., tramite Azure Functions) senza gonfiare la memoria del server web che serve il visualizzatore.

Perché è importante per le grandi imprese

  • Costo prevedibile – annotazione e OCR operano per pagina, non per documento, mantenendo l’uso di memoria lineare rispetto al contenuto visibile.
  • Pronto per la conformità – le annotazioni sono salvate come XML, facilitando audit o redazioni.
  • Sicurezza multi‑tenant – ogni token di tenant isola il proprio indice OCR, evitando perdite di dati tra tenant.

Conversione lato server e stampa controllata: mantenere i carichi di lavoro efficienti

Molti portali devono convertire file Office, disegni CAD o messaggi email in PDF o formati immagine per un rendering uniforme. Una trappola comune è eseguire la conversione nello stesso processo, il che provoca picchi di RAM e CPU mentre l’utente attende. Il Converter Plugin di Doconut sposta il lavoro pesante verso un servizio lato server scalabile orizzontalmente.

Convertire senza caricare l’intero file sorgente

L’API di conversione accetta percorsi sorgente e destinazione (o stream) e opera in modalità streaming, così il file sorgente non viene mai materializzato completamente in memoria. Una volta pronto il PDF (o altro formato), il visualizzatore lo apre usando la stessa tecnica di caricamento lazy descritta prima.

Stampa controllata – evita la rasterizzazione dell’intero documento

Durante la stampa di PDF di grandi dimensioni, Doconut trasmette i job di stampa pagina per pagina al driver della stampante. Questo approccio consente di applicare quote o filigrane senza caricare mai l’intero documento in RAM.

Scalabilità di livello enterprise

ScenarioTecnica di risparmio memoria di Doconut
Conversione batch di 10 000 file OfficeUsa worker in background con conversione basata su stream; ogni worker gestisce un file alla volta, mantenendo bassa la RAM.
Stampa on‑demand di disegni CAD a 5 cifreStampa tramite stream di pagina; non è richiesta la rasterizzazione completa del disegno.
Portale SaaS multi‑tenantCode di conversione separate per tenant; l’isolamento della memoria è automatico perché ogni job lavora sul proprio stream.

Best practice per scalare Doconut in ambienti enterprise

Anche con un motore a basso consumo di memoria, le distribuzioni reali necessitano di alcune guardie di sicurezza. Di seguito le pratiche comprovate che potenziano i punti di forza integrati di Doconut.

1. Limita la dimensione della cache di pagina per sessione

Configura il visualizzatore per mantenere in memoria solo le pagine più recenti. Ridurre la cache abbassa direttamente il consumo di RAM per sessione.

2. Esegui OCR e conversione in micro‑servizi isolati

Distribuisci il Search Plugin e il Converter Plugin in contenitori separati dietro una coda di messaggi (RabbitMQ, Azure Service Bus, ecc.). Questo isola i picchi di memoria e ti permette di autoscalare ogni componente in modo indipendente.

3. Abilita Trim e ReadyToRun di .NET 6

Quando pubblichi la tua API basata su Doconut, attiva il trimming per rimuovere IL inutilizzato e ridurre l’impronta binaria:

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

Un binario più piccolo significa un set di lavoro più ridotto, traducendosi in meno RAM per contenitore.

Conclusione

Ottimizzare l’uso della memoria è fondamentale per qualsiasi soluzione di visualizzazione di documenti su larga scala. Sfruttando l’architettura stream‑first di Doconut, il nucleo ottimizzato per le dipendenze e i plugin on‑demand per annotazione/OCR, puoi mantenere il consumo di RAM prevedibile offrendo al contempo esperienze di visualizzazione rapide e reattive. Applica i pattern di best practice consigliati—cache di token distribuita, cache di pagina limitata, isolamento in micro‑servizi e build trimmed—e sbloccherai il pieno potenziale di scalabilità di Doconut.

Pronto a vedere la differenza? Inizia la tua prova gratuita di Doconut oggi e sperimenta una visualizzazione di documenti a bassa memoria e alte prestazioni nelle tue applicazioni .NET.

#document viewer#performance#.NET#enterprise#Doconut#visualizzatore di documenti#prestazioni#impresa