2009-11-10 2 views
1

Crystal Reports Connection을 설정하는 방법을 개발했습니다.연결 정보를 설정할 때의 성능 문제 Crystal Reports

이 방법은 먼저 구성 파일에서 연결 문자열을 가져 와서 Crystal Reports ConnectionInfo 개체를 만듭니다.

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 

이는 폼이로드 된 것은 이번이 처음 발생 :

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

myTableLogonInfo.ConnectionInfo = myConnectionInfo 

그런 다음이 코드를 실행하는 데 6 초 이상 소요 :

다음 코드는 실행하는 데 5 초 이상 소요 , 후속 시간은

335ms (5349ms와 비교) 및 52ms (6228ms와 비교)

그러나 응용 프로그램을 다시로드하면 동일한 느린 시간이 다시 발생합니다.

내 보고서에는 일반적으로 3 개 이하의 테이블이 많지 않습니다. 이 경우에는 1 개의 테이블 만 있습니다.

현재 테스트 중이며 VS2008과 SQLServer2005는 모두 로컬에서 실행됩니다. 응용 프로그램이 클라이언트에서 실행되고 데이터베이스가 동일한 LAN에있는 서버에있는 QA 환경에서도 동일한 문제가 발생합니다.

제 질문은이 코드 부분의 속도를 향상시킬 수 있습니까? 보고서 연결 정보를 설정하는 데 너무 오래 걸리는 이유는 무엇입니까? 보고서 연결이 잘못 되었습니까?

아이디어가 있으십니까? 더 나은 방법은

+0

는 거대한 크리스탈 라이브러리를로드합니다. 오래 걸리는'report.Load() '가 아닌 것은 확실합니다. – dotjoe

+0

이러한 코드 덩어리를 시작하고 멈추는 StopWatch가있어서 Load() 메서드라고 생각하지 않습니다. 어디서나 Load 메서드를 실제로 호출하지는 않지만 myReport.ExportToDisk()를 수행 한 다음 새 보고서 양식 표시 창에 보고서를 표시합니다. –

+0

특정 코드 행으로 범위를 좁힐 수 있는지 알아보기 위해 디버그 모드에서 코드를 밟았습니까? – Dusty

답변

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