Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Crystal Reports
Crystal Reports Forum d'entraide sur Crystal Reports. Avant de poster --> FAQ Crystal, Tutoriels Crystal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/02/2005, 11h46   #1
Membre éprouvé
 
Avatar de sur_uix
 
Inscription : mai 2002
Messages : 377
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : mai 2002
Messages : 377
Points : 471
Points : 471
Par défaut [Crystal Report]Problème de mémoire avec le moteur RDC

Hello,
j'ai constaté que le moteur RDC ne libére pas correctement la mémoire lorsque l'on fait du traitement en boucle d'un rapport.
Exemple de code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  //Si IReport est chargé alors ON ferme
  CrReport1.Disconnect;
 
  Application.ProcessMessages;
 
  //Chargement du Rapport
  CrReport1.ConnectTo(CrApplication1.OpenReport(DCFileNameEdit1.Text,1));
 
  CrReport1.DiscardSavedData;
  //Connecte les TABLES
  FOR i:= 1 TO CrReport1.DATABASE.TABLES.Count do
    IF LowerCase(CrReport1.DATABASE.TABLES[i].DllName) = 'crdb_oracle.dll' Then
    WITH CrReport1.DATABASE do
    begin
      TABLES[i].ConnectionProperties.DeleteAll;
      TABLES[i].ConnectionProperties.ADD('Server',edtPwd.Text);
      TABLES[i].ConnectionProperties.ADD('User ID',edtName.Text);
      TABLES[i].ConnectionProperties.ADD('Password',edtDB.Text);
 
      IF (Pos('PC_',TABLES[i].Location)=0) AND (Pos('Command',TABLES[i].Name)=0) AND (Pos('DIC_PC_',TABLES[i].Name)=0) AND (Pos('V_PC_',TABLES[i].Name)=0)AND (Pos('SYS_',TABLES[i].Name)=0) Then
         //TABLES[i].SetTableLocation(edtName.Text,str,str2);
         TABLES[i].Location := edtName.Text+'.'+TABLES[i].Location;
    end;
 
  //Affiche dans le viewer
  ADDCRViewer1.ReportSource := CrReport1.Intf;
  ADDCRViewer1.ViewReport;
A chaque appel de ce code la mémoire augmente de 1Mb, ce qui me pose d'énorme problème de pérformance lorsque le client imprime 400 factures......
Est-ce que quelqu'un a déjà rencontré le problème et mieux une solution ?
sur_uix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2005, 16h16   #2
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Bonjour Sur_Uix,
Ton code c'est du delphi ?? (je ne connais pas Delphi ! )
....
Et si tu détruisais l'objet crreport1 à chaque fois avant de rentrer dans cette procédure, c'est un peu embêtant parcequ'il devra recharger la DLL, mais peut-être qu'il va libérer la mémoire .... non ??
En VB ca ferait :
Code :
SET crReport1 = Nothing
enfin c'est juste une idée .
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2005, 16h24   #3
Membre éprouvé
 
Avatar de sur_uix
 
Inscription : mai 2002
Messages : 377
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : mai 2002
Messages : 377
Points : 471
Points : 471
Hello,
oui c'est du Delphi.
Ce que tu proposes ici
Code :
SET crReport1 = Nothing
Et bien en fait je le fait làEn fait l'objet CrReport1 est une classe wrappeur de l'interface IReport du RDC. et dans Disconnect il y a
sur_uix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2005, 09h09   #4
Membre éprouvé
 
Avatar de sur_uix
 
Inscription : mai 2002
Messages : 377
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : mai 2002
Messages : 377
Points : 471
Points : 471
Pour info j'ai trouvé une solution, c'est de libérer aussi le moteur d'impression.

Code :
1
2
3
 
CrReport1.Disconnect;
CrApplication1.Disconnect;
Je trouve très bizzard de devoir libérer le moteur alors que je vais le recréer quelques secondes plustard, mais de cette manière je n'ai plus de problème mémoire.
sur_uix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h56.


 
 
 
 
Partenaires

Hébergement Web