2009-11-10 87 views
1

我開發了一種設置Crystal Reports連接的方法。設置連接信息時的性能問題Crystal Reports

此方法首先從配置文件抓取連接字符串,創建一個Crystal Reports ConnectionInfo對象。然後

以下代碼接管5秒運行:

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

myTableLogonInfo.ConnectionInfo = myConnectionInfo 

然後,代碼接管6秒運行:

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 

這隻發生第一次的形式被加載,其後的時間是

335ms(與5349ms相比) 和 52ms(與6228ms相比)

但是,當應用程序重新加載時,會再次發生相同的慢速時間。

我的報告中一般不超過3張。在這種情況下只有一張桌子。

這是目前正在測試中,VS2008和SQLServer2005都在本地運行。在質量保證環境中也會出現同樣的問題,即應用程序在客戶端上運行,數據庫位於同一局域網上的服務器上。

所以我的問題是,我可以提高這部分代碼的速度嗎?爲什麼設置報告連接信息需要很長時間?我是否錯誤地連接到報告?

任何想法?

謝謝,

+0

這需要一段時間來加載大量的晶體庫。你確定它不是'report.Load()',這需要很長時間。 – dotjoe 2009-11-10 21:07:12

+0

我有一個StopWatch開始和停止這些代碼塊,所以我不認爲這是Load()方法。我實際上並沒有在任何地方調用Load方法,但是我做myReport.ExportToDisk(),然後我也在新的報表窗口中顯示報表。 – 2009-11-11 04:46:18

+0

你是否已經在調試模式中檢查代碼,看看你是否可以縮小到特定的代碼行? – Dusty 2009-11-11 15:34:09

回答

0

更好的方法是:

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