Questa è più una domanda tecnica "come fare" o "approccio migliore".C# LINQ e calcoli che coinvolgono set di dati di grandi dimensioni
Abbiamo un requisito corrente per recuperare i record dal database, inserirli in un elenco "in memoria" e quindi eseguire una serie di calcoli sui dati, cioè i valori massimi, le medie e alcune statistiche personalizzate più specifiche .
L'inserimento dei dati in un elenco "in memoria" non è un problema poiché utilizziamo NHibernate come ORM e svolge un eccellente lavoro di recupero dei dati dal database. Il consiglio che sto cercando è come dovremmo eseguire al meglio i calcoli sulla lista risultante di dati.
Idealmente mi piacerebbe creare un metodo per ogni statistica, MaximumValue(), AverageValueUnder100(), MoreComplicatedStatistic() ecc ecc. Ovviamente passando le variabili richieste a ciascun metodo e facendogli restituire il risultato. Questo approccio renderebbe il test unitario un gioco da ragazzi e ci fornirà una copertura eccellente.
Si verificherà un problema di prestazioni se eseguiamo una query LINQ per ogni calcolo o dovremmo consolidare il numero di chiamate a ciascun metodo di statistica nel minor numero possibile di query LINQ. Ad esempio, non ha molto senso passare l'elenco di dati a un metodo chiamato AverageValueBelow100 e quindi passare l'intero elenco di dati a un altro metodo AverageValueBelow50 quando potrebbero essere effettivamente eseguiti con una query LINQ.
Come possiamo raggiungere un alto livello di granularità e separazione senza sacrificare le prestazioni?
Qualche consiglio ... la domanda è abbastanza chiara?
L'approccio migliore sarebbe quello di eseguire le query sul database in cui si ha il vantaggio di indici per migliorare le prestazioni –
davvero? quindi, piuttosto che elaborare "in memoria", sarebbe meglio interrogare il database. alcuni dei calcoli sono piuttosto complicati quindi non sono del tutto sicuro che questo sarebbe l'approccio migliore. – Rowen
Molto spesso i database sono più veloci –