Ciao Massimiliano,
dovresti usare il profiler di Visual Studio per capire qual è, esattamente, la riga di codice che sta causando il rallentamento. Lo trovi solo sulle versioni commerciali (cioè: non Express).
Qui una guida per iniziare ad usarlo.
http://msdn.microsoft.com/en-us/library/ms182372.aspxIl fatto è che se non sappiamo qual è il collo di bottiglia è inutile spostare il codice su altri thread, bisogna affrontare il problema direttamente e risolverlo. Poi si può pensare a come ottimizzare la user experience, ad esempio caricando la pagina per prima e poi ottenendo i dati da una richiesta ajax asincrona.
Ti faccio vedere brevemente come il profiler può aiutarti. Prendi un codice banale come questo:
//creo una lista di 10 milioni di interi
var elenco = Enumerable.Range(0, 10000000).ToList();
//calcolo la media
var media = elenco.Average();
E' difficile sapere a priori quale istruzione richiederà più risorse ma dal
rapporto dei risultati, si vede che la prima ha richiesto un 39% mentre la seconda un 23% del tempo complessivo di elaborazione della pagina.
Io ora non ti posso dire come risolvere il problema; bisogna prima identificarlo. Il codice che hai postato mi pare ok, a parte due piccole cose che non penso assolutamente siano la causa.
- La riga in cui valorizzi TMPDateTime non è necessaria, infatti avevi già ottenuto un DateTime dalla precedente chiamata a CDate.
- Usi FILECSV.Item per l'accesso randomico ai dati che hai caricato dal CSV. L'ideale invece sarebbe leggere i dati in maniera forward-only ma, dato che le tue colonne contengono valori per canali diversi, dovresti strutturare il ciclo diversamente.
A proposito di FILECSV.Item, io ho l'impressione che il problema potrebbe essere là dentro. Tiene in memoria le righe del CSV in una List<T> oppure le legge da una sorgente IEnumerable? Posta il codice, forse ci dà qualche aiuto.
ciao,
Moreno
Modificato da BrightSoul il 05 ottobre 2013 12.48 -