Esta es una cuestión más técnica de "cómo hacerlo" o de "mejor enfoque".C# LINQ y cálculos que involucran grandes conjuntos de datos
Tenemos un requerimiento actual para recuperar registros de la base de datos, colocarlos en una lista 'en memoria' y luego realizar una serie de cálculos sobre los datos, es decir, valores máximos, promedios y algunas estadísticas personalizadas más específicas. .
Obtener los datos en una lista 'en la memoria' no es un problema ya que utilizamos NHibernate como nuestro ORM y hace un trabajo excelente al recuperar datos de la base de datos. El consejo que estoy buscando es cómo realizar mejor los cálculos en la lista de datos resultante.
Idealmente me gustaría crear un método para cada estadística, MaximumValue(), AverageValueUnder100(), MoreComplicatedStatistic() etc etc. Por supuesto, pasar las variables requeridas a cada método y hacer que devuelva el resultado. Este enfoque también haría las pruebas unitarias simples y nos proporcionaría una excelente cobertura.
¿Habría un golpe de rendimiento si realizamos una consulta LINQ para cada cálculo o deberíamos consolidar tantas llamadas a cada método de estadística en tan pocas consultas LINQ como sea posible. Por ejemplo, no tiene mucho sentido pasar la lista de datos a un método llamado AverageValueBelow100 y luego pasar toda la lista de datos a otro método, AverageValueBelow50, cuando podrían ser efectivamente realizados con una consulta LINQ.
¿Cómo podemos lograr un alto nivel de granularidad y separación sin sacrificar el rendimiento?
Cualquier consejo ... ¿es la pregunta lo suficientemente clara?
¿El mejor enfoque sería realizar las consultas contra la base de datos donde tiene el beneficio de los índices para mejorar el rendimiento –
realmente? entonces, en lugar de procesar 'en memoria' sería mejor consultar la base de datos. algunos de los cálculos son bastante complicados, así que no estoy del todo seguro de que este sea el mejor enfoque. – Rowen
La mayoría de las bases de datos son más rápidas –