2009-01-23 19 views
1

Ainsi, le problème est lorsque nous montrons au document créé par l'utilisateur dans la boîte de dialogue JasperReport. L'utilisateur peut appuyer sur l'icône d'impression et l'envoyer à l'imprimante.JasperReport - prendre trop de ressources

Il semble prendre trop de ressources sur l'ordinateur du client sur les trois niveaux: création de rapport, affichage du rapport sur l'écran et envoi à l'imprimante. Un exemple de PC est AMD Duron 800 MHz avec 256 Mo de RAM, nous devons donc voir si nous pouvons faire quelques optimisations pour une meilleure expérience utilisateur.

Il faut aussi beaucoup de ressources sur un ordinateur 'normal' avec processeur cadencé à 2 GHz et 1 Go de RAM donc j'ai besoin de voir s'il y a une option pour régler JasperReport pour qu'il se comporte moins bien sur ressources.

Répondre

5

Une utilisation excessive des sous-rapports peut augmenter les demandes de ressources pour un rapport. Chaque sous-rapport engendre son propre thread pendant le temps de remplissage. De plus, si vous utilisez des classes de scripts ou d'aides, assurez-vous que toutes les ressources qu'elles créent sont correctement nettoyées. Assurez-vous également que vous utilisez le dernier paquet JR.

Une note. L'API JR comprend un ensemble de virtualiseurs. Lorsque le rapport est plein, le rapport entier est créé en tant qu'objet (JasperPrint). Selon le nombre de pages dans le rapport, cet objet peut devenir assez volumineux. Les virtualiseurs peuvent être configurés pour écrire dans le système de fichiers lorsqu'un seuil de page défini a été atteint.

Généralement, cela réduit l'utilisation globale de la mémoire mais augmente le temps de remplissage. Un composant peut être le virtualiseur gzip qui, plutôt que d'écrire dans le système de fichiers, compresse les objets générés en utilisant gzip.

Voici une FAQ sur le sujet: http://community.jaspersoft.com/wiki/support-large-reports

L'exemple se réfère à peut être obtenu en téléchargeant la source JR.

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

Du point de vue de haut niveau, si vous exécutez ce rapport dans une application, vous pouvez instancier le virtualizer (est l'interface ici la liste des classes implémentant connues): http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JRVirtualizer.html

Ensuite, la référence est utilisé au moment de remplissage:

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

Si vous êtes un iReport virtualizer peut être configuré dans options -> Paramètres.

J'espère que c'est utile.

Luke

1

Bien Jasper Reports est simplement un pot, vous devez donc être plus précis: exécutez-vous JasperReports dans une application Web (sur Tomcat, Glassfish, JBoss, etc.) ou utilisez-vous iReport? Si vous l'utilisez dans un serveur d'applications, la chose la plus évidente que je puisse penser est de vous assurer que vous utilisez le bon compilateur de rapports, à savoir le compilateur JDT. Assurez-vous que vous n'utilisez pas le compilateur beanshell. C'est lent comme l'enfer.

+0

Nous n'utilisons iReport que pour la conception et la compilation. Tout est exécuté sur l'application swing du client –

+0

Ensuite, assurez-vous qu'il est exécuté et exécuté avec le compilateur Eclipse JDT (le dist JasperReports est fourni avec le JAR mais vous devez le configurer pour l'utiliser). Si vous utilisez JRBshCompiler, c'est probablement la cause. – cletus