Ritorno sull'ormai noto problema di lentezza CR 2008 nella fase di load
Dim rd As ReportDocument
rd = New ReportDocument()
rd.Load("mio_rpt.rpt")
Le soluzioni vertono tutte verso quelle già citate in questo (ed altri) forum: preloading, thread, etc.
E questo è quello che farò per migliorare le performance.
Tuttavia, prima di gettare la spugna e passare alla soluzione c/s, ho fatto questo programmino di prova:
Imports CrystalDecisions.CrystalReports.Engine
Imports com.XXX.XXXfw.dotnet.crr.util.MCRRUtil
Public Module MTestReport
Public Sub Main()
Dim rptname As String
Dim path As String
Dim rptdoc As ReportDocument
Dim starttimeop As DateTime
Dim stoptimeop As DateTime
Dim durationop As TimeSpan
rptdoc = New ReportDocument()
Console.WriteLine("Caricamento reports in corso...")
path = ExtractPathAndFileName(Application.ExecutablePath)(0) & "\"
' #0
rptname = path & "CR8Sub_XXX_LI.rpt"
starttimeop = DateTime.Now
rptdoc = New ReportDocument()
rptdoc.Load(rptname)
stoptimeop = DateTime.Now
durationop = stoptimeop - starttimeop
Console.WriteLine("#0 " & rptname & " : " & durationop.ToString)
rptdoc.Close()
' #1
rptname = path & "BollaEntrata.rpt"
starttimeop = DateTime.Now
rptdoc.Load(rptname)
stoptimeop = DateTime.Now
durationop = stoptimeop - starttimeop
Console.WriteLine("#1 " & rptname & " : " & durationop.ToString)
rptdoc.Close()
' #2
rptname = path & "CR8Sub_XXX_LI.rpt"
starttimeop = DateTime.Now
'rptdoc = New ReportDocument()
rptdoc.Load(rptname)
stoptimeop = DateTime.Now
durationop = stoptimeop - starttimeop
Console.WriteLine("#2" & rptname & " : " & durationop.ToString)
rptdoc.Close()
' #3
rptname = path & "BollaEntrata.rpt"
starttimeop = DateTime.Now
rptdoc.Load(rptname)
stoptimeop = DateTime.Now
durationop = stoptimeop - starttimeop
Console.WriteLine("#3 " & rptname & " : " & durationop.ToString)
rptdoc.Close()
' #4
rptname = path & "Fattura.rpt"
starttimeop = DateTime.Now
rptdoc = New ReportDocument()
rptdoc.Load(rptname)
stoptimeop = DateTime.Now
durationop = stoptimeop - starttimeop
Console.WriteLine("#4 " & rptname & ": " & durationop.ToString)
rptdoc.Close()
' #5
rptname = path & "RegressioneFatture.rpt"
starttimeop = DateTime.Now
rptdoc = New ReportDocument()
rptdoc.Load(rptname)
stoptimeop = DateTime.Now
durationop = stoptimeop - starttimeop
Console.WriteLine("#5 " & rptname & " : " & durationop.ToString)
rptdoc.Close()
' #6
rptname = path & "Fattura.rpt"
starttimeop = DateTime.Now
rptdoc = New ReportDocument()
rptdoc.Load(rptname)
stoptimeop = DateTime.Now
durationop = stoptimeop - starttimeop
Console.WriteLine("#6 " & rptname & " : " & durationop.ToString)
rptdoc.Close()
Console.WriteLine(vbCrLf & "Reports caricati")
End Sub
End Module
Lanciandolo svariate volte ho notato (via task manager/Process Explorer) che, durante l'esecuzione, la cpu occupata è intervallata da momenti di non occupazione della cpu. Questo mi ha fatto pensare che per qualche motivo ci sia "qualcuno" nel mio programma che sta lavorando in background in rete. Ma tutto è in locale (gli rpt citati sono nella stessa directory dell'eseguibile)! Come è possibile?
L'ho lanciato più volte sia con la rete attaccata che staccata (brutalmente isolavo la macchina staccando il cavo di rete). Questo è il risultato:
Con mex del tipo
Warning: ORB::BOA_init: hostname lookup returned `localhost' (127.0.0.1/::1)
la rete è "staccata".
TEST
C:\temp\testlentezza>CRR2008ExeOptimizer.exe
Caricamento reports in corso...
#0 C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:01.2500000
#1 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:08.1093750
#2C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:00.5625000
#3 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:01.3125000
#4 C:\temp\testlentezza\Fattura.rpt: 00:00:08.8750000
#5 C:\temp\testlentezza\RegressioneFatture.rpt : 00:00:00.6718750
#6 C:\temp\testlentezza\Fattura.rpt : 00:00:01.5937500
Reports caricati
C:\temp\testlentezza>CRR2008ExeOptimizer.exe
Caricamento reports in corso...
#0 C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:01.2812500
#1 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:05.8125000
#2C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:00.5468750
#3 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:01.3437500
#4 C:\temp\testlentezza\Fattura.rpt: 00:00:06.1250000
#5 C:\temp\testlentezza\RegressioneFatture.rpt : 00:00:00.6250000
#6 C:\temp\testlentezza\Fattura.rpt : 00:00:01.5468750
Reports caricati
C:\temp\testlentezza>CRR2008ExeOptimizer.exe
Caricamento reports in corso...
Warning: ORB::BOA_init: hostname lookup returned `localhost' (127.0.0.1/::1)
Use the -OAhost option to select some other hostname
#0 C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:02.8906250
#1 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:01.4218750
#2C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:00.5468750
#3 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:01.3125000
#4 C:\temp\testlentezza\Fattura.rpt: 00:00:01.6093750
#5 C:\temp\testlentezza\RegressioneFatture.rpt : 00:00:00.6562500
#6 C:\temp\testlentezza\Fattura.rpt : 00:00:01.5156250
Reports caricati
C:\temp\testlentezza>CRR2008ExeOptimizer.exe
Caricamento reports in corso...
Warning: ORB::BOA_init: hostname lookup returned `localhost' (127.0.0.1/::1)
Use the -OAhost option to select some other hostname
#0 C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:01.2812500
#1 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:01.3593750
#2C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:00.5312500
#3 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:01.3437500
#4 C:\temp\testlentezza\Fattura.rpt: 00:00:01.5625000
#5 C:\temp\testlentezza\RegressioneFatture.rpt : 00:00:00.6562500
#6 C:\temp\testlentezza\Fattura.rpt : 00:00:01.5468750
Reports caricati
C:\temp\testlentezza>CRR2008ExeOptimizer.exe
Caricamento reports in corso...
#0 C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:01.5625000
#1 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:08.5781250
#2C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:00.5468750
#3 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:01.2968750
#4 C:\temp\testlentezza\Fattura.rpt: 00:00:08.8593750
#5 C:\temp\testlentezza\RegressioneFatture.rpt : 00:00:00.6718750
#6 C:\temp\testlentezza\Fattura.rpt : 00:00:01.6093750
Reports caricati
C:\temp\testlentezza>CRR2008ExeOptimizer.exe
Caricamento reports in corso...
#0 C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:01.3750000
#1 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:08.1250000
#2C:\temp\testlentezza\CR8Sub_XXX_LI.rpt : 00:00:00.5781250
#3 C:\temp\testlentezza\BollaEntrata.rpt : 00:00:01.3906250
#4 C:\temp\testlentezza\Fattura.rpt: 00:00:08.8750000
#5 C:\temp\testlentezza\RegressioneFatture.rpt : 00:00:00.6875000
#6 C:\temp\testlentezza\Fattura.rpt : 00:00:01.5781250
Reports caricati
C:\temp\testlentezza>
Le performance in fase di load, con rete "staccata" sono decisamente migliori.
Che cosa vuol dire? Che cosa ho fatto? C'è qualche cosa che .NET sta andando a cercare per verificare qualche libreria di Crystal (o viceversa)?
Oppure: ho sbagliato tutto? sono fuori strada?
Citando Jhon Lennon (The Beatles): won't you please, please help me?
Ciao.