2009-11-10 6 views
1

J'ai développé une méthode qui définit la connexion Crystal Reports.Problème de performances lors du paramétrage des informations de connexion Crystal Reports

Cette méthode collecte d'abord la chaîne de connexion à partir du fichier de configuration crée un objet Crystal Reports ConnectionInfo.

Le code suivant prend alors plus de 5 secondes pour exécuter:

Dim myTables As Tables = report.Database.Tables 
Dim myTableLogonInfo As TableLogOnInfo = New TableLogOnInfo() 

myTableLogonInfo.ConnectionInfo = myConnectionInfo 

Ensuite, ce code prend plus de 6 secondes pour exécuter:

For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables 
myTable.ApplyLogOnInfo(myTableLogonInfo) 
    myTable.LogOnInfo.ConnectionInfo.DatabaseName = myTableLogonInfo.ConnectionInfo.DatabaseName 
    myTable.LogOnInfo.ConnectionInfo.ServerName = myTableLogonInfo.ConnectionInfo.ServerName 
    myTable.LogOnInfo.ConnectionInfo.UserID = myTableLogonInfo.ConnectionInfo.UserID 
    myTable.LogOnInfo.ConnectionInfo.Password = myTableLogonInfo.ConnectionInfo.Password 
Next 

Cela se produit uniquement la première fois que le formulaire est chargé , les fois suivantes, il est

335 ms (par rapport à 5349ms) et 52ms (par rapport à 6228ms)

Cependant, lorsque l'application est rechargée, les mêmes temps lents se reproduisent.

Il n'y a pas beaucoup de tables différentes dans mon rapport généralement 3 ou moins. Seulement 1 table dans ce cas.

Ceci est actuellement en test et VS2008 et SQLServer2005 s'exécutent tous deux localement. Le même problème se produit également dans l'environnement de contrôle qualité, où l'application est exécutée sur le client et la base de données se trouve sur un serveur sur le même réseau local. Donc, ma question est, puis-je améliorer la vitesse de cette partie du code? Pourquoi cela prend-il autant de temps à définir les informations de connexion au rapport? Est-ce que je fais des connexions incorrectes au rapport?

Des idées?

Merci,

+0

Il faut un certain temps pour charger les bibliothèques de cristal massif. Êtes-vous sûr que ce n'est pas le 'report.Load()' qui prend beaucoup de temps. – dotjoe

+0

J'ai un StopWatch démarrant et s'arrêtant autour de ces blocs de code, donc je ne pense pas que ce soit la méthode Load(). Je n'appelle pas réellement la méthode Load n'importe où, je fais cependant myReport.ExportToDisk() et puis montre également le rapport dans une nouvelle fenêtre d'affichage de forme de rapport. –

+0

Avez-vous parcouru le code en mode débogage pour voir si vous pouvez le réduire à une ligne de code spécifique? – Dusty

Répondre

0

Une meilleure approche est:

Dim report = New ReportDocument 

Try 
     report.Load(filename, OpenReportMethod.OpenReportByTempCopy) 

     'do this for each unique database connection 
     report.SetDatabaseLogon("user","password","server","database") 

     'continue processing...  

Catch 
     'preserve stack trace 
     Throw 

End Try 
Questions connexes