Lentezza report

giovedì 14 settembre 2006 - 12.05

ducky Profilo | Junior Member

Ciao a tutti,
ho realizzato un report per un'applicazione ASP.NET, ma è troppo lento, sia nella creazione, che nello scorrimento delle pagine.
Mi hanno detto chiaramente che questa lentezza non è accettabile e bisogna fare qualcosa per ottimizzare le prestazioni.

In ASP tradizionale, invece, i report erano molto più veloci.

Tra i due sistemi ci sono in realtà 2 differenze:
1) in ASP tradizionale usavo l'ActiveX Viewer, in ASP.NET uso il Viewer di default (perché non ho ancora capito come fare a utilizzare l'ActiveX con il .NET);
2) in ASP tradizionale scrivevo la query completa da codice, in ASP.NET scrivo la query "base" nel Command, dopodiché nel Record Selection imposto le condizioni utilizzando i parametri.
Potrebbe essere questa la causa di tanta lentezza?
In questo modo, Crystal Report prima estrae TUTTI i dati, e poi applica i criteri di selezione?

Un'ultima domanda... è possibile, all'interno del Command, scrivere la query parametrizzata (qualcosa del tipo mioCampo = :parametro), o bisogna farlo da codice ASP.NET?

Qualsiasi informazione mi è di grande aiuto, grazie in anticipo


***UPDATE***: ho provato a passare la query da codice ASP.NET, ma le prestrazioni non cambiano: il report è ancora dannatamente lento.
A questo punto mi viene da pensare che la lentezza è proprio dovuta al componente viewer per il .NET, ma non ci posso credere... possibile che nessun'altro ha il mio stesso problema?!?!?
Vi prego di farmi sapere se è possibile parametrizzare la query all'interno del Command, senza dover utilizzare la Record Selection...
Grazie

freeteo Profilo | Guru

ciao,
diciamo che ci posssono essere varie ragioni,tipicamente pero' sono queste le cose che rallentano l'elaborazione:

- tabelle linkate come sorgente dati (meglio usare delle left join e linkarle da query decisamente piu veloce)
- sottoreport (da usare con cautela)
[per entrambe, se invece lavori con i gruppi puoi ottenere gli stessi risultati.]

- hai messo troppe immagini (deve renderizzarle al volo quindi perde tempo di cpu)
- hai troppi oggetti grafici (meglio se agli oggetti associ una classe di css)


Poi potrebbe essere anche qualcosa di asp.net:
- non l'hai compilato e quindi è 1po piu lento
- hai lasciato il tag "<compilation debug ="true" />" nel web.config
- hai poca ram sul svr? il report ne utilizza 1po

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ducky Profilo | Junior Member

Ciao, Freeteo!
Inanzitutto grazie per la risposta. Ho veramente bisogno di assistenza

Andiamo con ordine...

> tabelle linkate come sorgente dati (meglio usare delle left join e linkarle da query decisamente piu veloce)

No, non ho linkato le tabelle da Crystal Reports. Ho scritto la query e le condizioni di join all'interno del Command. Dopodiché ho scritto le condizioni di ricerca nel Record Selection.

> sottoreport (da usare con cautela)

Sì, ho un sottoreport... mi è necessario.
Però quando usavo ASP tradizionale i sottoreport non mi davano nessun problema di lentezza.

> se invece lavori con i gruppi puoi ottenere gli stessi risultati.

In che senso... come posso utilizzare un gruppo al posto di un sottoreport?
Nel subreport ho bisogno di specificare una diversa query, anche con campi differenti.

> hai messo troppe immagini

Non ho inserito nessuna immagine!

> hai troppi oggetti grafici (meglio se agli oggetti associ una classe di css)

Non ho nessun oggetto grafico, a parte una linea e un box!

> non l'hai compilato e quindi è 1po piu lento

Compilo sempre... non dovrebbe essere questo il problema.

> hai lasciato il tag "<compilation debug ="true" />" nel web.config

In effetti era impostato a "true". L'ho sostituito con "false", ma le prestazioni non cambiano.

> hai poca ram sul svr? il report ne utilizza 1po

3 GB!!! Non mi sembra poca...


Ciao

freeteo Profilo | Guru

ciao,
allora non saprei proprio...ma alla fine il report va giusto? quindi sembra proprio 1 problema di runtime...non ho idea a questo punto mi dispiace, se vuoi provare a scaricarti qualche service pack magari cambia qualcosa ma è un consiglio il mio, non una soluzione

http://support.businessobjects.com/downloads/service_packs/crystal_reports_en.asp
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ducky Profilo | Junior Member

Ciao,
sì il report va, ma come ti dicevo è troppo lento.

Proverò a scaricare il service pack... non mi potrebbe creare ulteriori problemi, vero?

***EDIT***
certo che Crystal Reports è proprio un software pessimo... sto leggendo delle cose allucinanti nel readme del service pack...

***UPDATE***
comunque ho risolto eliminando il subreport, come mi avevi suggerito, e facendo un "merge" delle 2 query nel report principale.
Grazie

cmrcmr Profilo | Newbie

ducky
....ma è lento anche quando lo carichi nell'editor o solo in esecuzione?

se eliminando il subreport si è velocizzato probabilmente il link era fatto male controllalo.

Comunque di report ne abbiamo creati parecchi e siamo abbastanza soddisfatti e se può servire la nostra esperienza abbiamo individuato alcuni motivi di lentezza:

- Report creato male nell'editor (perde pezzi o sottoreport)....

- i sottoreport esterni sono una dannazione, meglio includerli

- la query sql la hai provata con Query Analyzer?...i tempi sono accettabili?

- i gruppi e le sezioni sono cerati bene e non deve fare dei rigiri doppi o tripli?

- se usi più tabelle i link sono corretti?

se vuoi maggiori dettagli siamo qui:-)

ducky Profilo | Junior Member

Ciao

> ....ma è lento anche quando lo carichi nell'editor o solo in esecuzione?

Nell'editor non faccio mai l'anteprima... i reports li provo direttamente in esecuzione (perché alla fine è lì che mi interessa verificare il funzionamento)

> se eliminando il subreport si è velocizzato probabilmente il link era fatto male controllalo.

Non sono un "guru" di SQL, ma il link era legato con le uniche chiavi disponibili... non c'era tanta possibilità di sbagliare (anche perché il risultato era corretto)

> i sottoreport esterni sono una dannazione, meglio includerli

Il mio sottoreport era incluso!

> la query sql la hai provata con Query Analyzer?...i tempi sono accettabili?

L'ho provata con TOAD, e sì, i tempi sono normali.

> i gruppi e le sezioni sono cerati bene e non deve fare dei rigiri doppi o tripli?

No, non mi sembra di aver fatto nulla di strano... è una semplice struttura con 2 raggruppamenti.

> se usi più tabelle i link sono corretti?

Sì, le condizioni di join sono OK.


Ne approfitto per chiedere anche a te... io sono ancora convinto che la causa di questa lentezza sia dovuta al diverso tipo di viewer.
Quando usavo l'ActiveX Viewer con ASP tradizionale, avevo un report con addirittura 4 sottoreport, eppure si apriva in un attimo! E sto parlando di applicazioni che girano sullo stesso server.
Il problema è che non sono mai riuscito a utilizzare l'ActiveX Viewer con .NET...

cmrcmr Profilo | Newbie

Non ti so dire, noi non usiamo in nessun caso il Viewer, non ci piace.

La soluzione che ci ha soddisfatto è quella di esportare il report in PDF e poi di includere un viewer Acrobat nella pagina web.

Se la tua applicazione è Web e vuoi il codice C# per fare delle prove, chiedimelo pure.

ducky Profilo | Junior Member

Ti ringrazio molto, comunque per quanto riguarda il codice C# sono a posto.

In ogni caso, grazie mille per la disponibilità!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5