Domanda

quindi, il problema è quando mostriamo un documento creato dall'utente nella finestra di dialogo JasperReport. L'utente può premere l'icona di stampa e inviarlo alla stampante.

Sembra che ci siano troppe risorse sul computer client su tutti e tre i livelli: creazione di report, visualizzazione di report sullo schermo e invio alla stampante. Un esempio di PC è AMD Duron 800MHz con 256 MB di RAM, quindi dobbiamo vedere se possiamo fare alcune ottimizzazioni per una migliore esperienza utente.

Ci vogliono anche risorse significative su computer "normali" con processore da 2 GHz e RAM da 1 GB, quindi ho bisogno di vedere se c'è un'opzione per ottimizzare JasperReport per comportarsi meno già con risorse.

È stato utile?

Soluzione

L'uso eccessivo di sottoreport può aumentare la domanda di risorse per un report. Ogni sottoreport genera il proprio thread durante il tempo di riempimento. Inoltre, se stai utilizzando scriptlet o classi di helper, assicurati che tutte le risorse che creano siano adeguatamente pulite. Assicurati anche di utilizzare l'ultimo pacchetto JR.

Una nota. L'API JR include una serie di virtualizzatori. Quando il report viene compilato, l'intero report compilato viene creato come oggetto (JasperPrint). A seconda del numero di pagine nel rapporto, questo oggetto può diventare piuttosto grande. I virtualizzatori possono essere configurati per scrivere nel file system quando viene raggiunta una soglia di pagina impostata.

In genere ciò riduce l'utilizzo complessivo della memoria ma aumenta il tempo di riempimento. Un compresso potrebbe essere il virtualizzatore gzip che, anziché scrivere nel file system, comprime gli oggetti generati usando gzip.

Ecco una FAQ sull'argomento: http://community.jaspersoft.com/wiki/support-large-reports

L'esempio a cui fa riferimento può essere ottenuto scaricando la fonte JR.

http://sourceforge.net/project/showfiles.php?group_id = 36382 & amp; package_id = 28579

Da una vista di alto livello, se si sta eseguendo questo report in un'applicazione, è possibile creare un'istanza del virtualizzatore (qui è l'interfaccia che elenca le classi di implementazione conosciute): http://jasperreports.sourceforge.net/api/net/ sf / JasperReports / motore / JRVirtualizer.html

Quindi il riferimento viene utilizzato al momento del riempimento:

        JRDataSource ds = new JREmptyDataSource(10);
        JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, "tmp");
        JasperPrint jasperPrint = fillReport(fileName, ds, virtualizer);

Se sei in iReport, un virtualizzatore può essere configurato in Opzioni - > Impostazioni.

Spero che sia utile.

Luca

Altri suggerimenti

Beh, Jasper Reports è semplicemente un barattolo, quindi devi essere più specifico: stai eseguendo JasperReports in un'app Web (su Tomcat, Glassfish, JBoss, ecc.) o lo stai eseguendo in iReport?

Se lo stai eseguendo in un appserver la cosa più ovvia a cui riesco a pensare è assicurarti di usare il compilatore di report giusto, vale a dire il compilatore JDT. Sicuramente assicurati di non utilizzare il compilatore beanshell. È lento come l'inferno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top