Buonasera a tutti,
ho sviluppato una applicazione web (portale clienti) con asp.net 4.6 e sql server express 2014, le tabelle di quest'ultimo contengono una gran quantità di dati (quasi 500.000 righe).

Quando vado a fare le estrazioni dei dati (stored procedure con join tra più tabelle), il tempo che il processo impiega a far ciò è abbastanza lungo (quasi un minuto), secondo voi cosa potrei fare per velocizzare ?

Usare query via asp.net invece di stored procedure richiamate via codice .net su sql server ?

Usare dei dataset tipizzati ?

Ringrazio in anticipo per chi mi possa aiutare a risolvere questo problema.

Buona serata
Modificato da angelo_aep il 13 giugno 2019 22:47 -

Angelo
11.645 messaggi dal 09 febbraio 2002
Contributi
Ciao Angelo,


Usare query via asp.net invece di stored procedure richiamate via codice .net su sql server ?

No, non cambierebbe nulla perché comunque il database dovrebbe lavorare con la stessa identica mole di dati. E' quella, insieme alla complessità della query, a determinare il tempo di esecuzione.

Per prima cosa esaminare il piano di esecuzione per capire se la query può essere ottimizzata in qualche modo, per esempio aggiungendo degli indici.

Potresti guadagnare altri secondi se il tuo server usasse dei dischi SSD anziché i tradizionali dischi meccanici.

Comunque, secondo me, dovresti usare un altro approccio: realizzare un secondo database denormalizzato, che cioè sia strutturato appositamente per velocizzare quelle specifiche interrogazioni. Questo significa che non avrai tante tabelle ma una sola, denormalizzata. Avrai informazioni duplicate ma pazienza, se questo significa migliorare di molto le prestazioni dalla query.

Questo articolo ti spiega la faccenda:
http://www.francescoficetola.it/2012/06/07/db-perche-denormalizzare-una-basedati/

Oppure, se ci sono pochi o nessun filtro, usi la MemoryCache di ASP.NET per conservare in memoria il risultato della query SQL. In questo modo il prossimo utente potrà trarre i risultati già pronti dalla cache, anziché dover nuovamente attendere 1 minuto che la query SQL si completi.

ciao,
Moreno

Enjoy learning and just keep making
Ciao Moreno,
dopo le tue indicazioni ho provato a spostare il database su disco SSD e qualche piccolo miglioramento si è notato.

A seguito di ciò ho provato ad eseguire un debug più approfondito per capire cosa potesse rallentare ancora la web application ed ho notato che rallenta, nel momento in cui vado ad impaginare i dati usando l'oggetto stream reader che mi costruisce in modo dinamico la tabella.

Lo so non è il controllo più adatto ma purtroppo in fase di sviluppo causa tempi stretti ho dovuto adottare una soluzione veloce.

Ora che sono più tranquillo vorrei sostituire tale controllo con qualcosa di più efficace, a tuo parere quale controllo mi consigli? Oggetto LITERAL?

Ti ringrazio in anticipo.

Saluti

Angelo
11.645 messaggi dal 09 febbraio 2002
Contributi
Ciao Angelo,


in cui vado ad impaginare i dati usando l'oggetto stream reader che mi costruisce in modo dinamico la tabella.

Penso sia improbabile che dipenda da questo, a meno che tu non stia rappresentando 100.000 righe in un'unica pagina web. In questo caso dovresti rappresentare solo qualche decina di righe e poi consentire all'utente di cambiare pagina per visualizzare le altre.


l'oggetto stream reader

L'oggetto StreamReader è usato per leggere un flusso di dati. Tu forse intendi lo StringBuilder?
Lo StringBuilder è l'oggetto più idoneo per comporre delle stringhe. E poi, quando la stringa è finalmente completa, l'assegni a un Literal affinché sia visualizzata nella pagina.

In alternativa potresti usare un Repeater, un GridView o qualsiasi altro controllo offerto da ASP.NET che sia opportuno usare in questo caso.


ho provato ad eseguire un debug più approfondito per capire cosa potesse rallentare

Usa la classe Stopwatch per misurare i tempi di esecuzione, oppure gli strumenti di profiling offerto da visual studio.
https://docs.microsoft.com/it-it/dotnet/api/system.diagnostics.stopwatch?view=netframework-4.8

ciao,
Moreno

Enjoy learning and just keep making
Ciao Moreno,
forse non sarò capace io, però oggi mi sono accorto di una cosa strana mai successa prima, in pratica ho installato Visual studio community edition 2019, vi ho aperto un progetto creato con al versione 2017, impostando dei punti di interruzione nel codice della pagina asp.net, ma tali blocchi vengono ignorati in quanto visual studio mi dice che i punti di interruzione verranno ignorati in quanto la versione non è uguale all'originale.

Anche compilando e/o ricompilando la soluzione e pubblicandola successivamente le modifiche apportate sia alla pagina sia al codebehind vengono mantenute nella versione originale ed ogni modifica fatta successivamente risulta "scomparsa" ovvero come se non l'avessi mai fatta.

:( Non ci sto capendo più niente..

p.f. saresti così gentile e farmi chiarezza in merito.

Ringrazio in anticipo per la tua risposta, spero un domani di poter tornare utile a qualcuno su questo forum, così come tu per me.

Grazie mille

Angelo
11.645 messaggi dal 09 febbraio 2002
Contributi
Ciao Angelo,
presta attenzione all'output di compilazione, magari si stanno verificando degli errori che impediscono all'applicazione di essere compilata correttamente.

Da solution explorer, fai tasto destro sulla soluzione e poi clicca "Pulisci", come vedi qui:
https://d33wubrfki0l68.cloudfront.net/6f83930cfe57385436571e88e348594544af9408/5c911/images/blog/2018-10-22-cleaning-visual-studio-project-output-using-git-clean/clean-solution-menu.png

Ora ricompila il progetto o avvialo con F5. Prima però verifica di avere impostato "Debug" come configurazione.
Cioè, qui devi scegliere Debug.
https://stackoverflow.com/questions/36623868/how-to-switch-between-debug-and-release-makefiles-in-eclipse-cdt/36624258


Anche compilando e/o ricompilando la soluzione e pubblicandola successivamente

Prima verifica che tutto funzioni in locale, poi pubblica. Ho l'impressione che la compilazione fallisca per qualche motivo.

ciao,
Moreno

Enjoy learning and just keep making
Ciao Moreno,
aprendo visual studio 2019 community edition, la voce CLEAN SOLUTION (o pulisci soluzione) non è presente, ma vi è una voce "ANALIZZA ED ESEGUI PULIZIA DEL CODICE.

Ho provato questa opzione ma non cambia nulla, il problema resta.

Oggi provo a disinstallare la versione 2019 e tornare indietro alla 2017, e provo a vedere se il problema si risolve e se la versione 2017 mostra l'opzione CLEAN SOLUTION.

Ti faccio sapere entro sera, come sono andati i test.

Grazie mille per il tuo gentile supporto.

Buona giornata

Ciao
Angelo

Angelo
11.645 messaggi dal 09 febbraio 2002
Contributi
Ciao,
prego, fammi sapere come va.

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.