¿Cómo puedo obtener una lista genérica de una tabla de datos con la menor sobrecarga?

StackOverflow https://stackoverflow.com/questions/1701539

  •  19-09-2019
  •  | 
  •  

Pregunta

Estoy buscando mejores prácticas aquí. Lo siento. Sé que es subjetiva, pero hay un montón de gente inteligente aquí, así que debe haber alguna manera "muy buena" de hacer esto.

Tengo un objeto personalizado llamada del empleado. Ese objeto tiene siete propiedades como nombre, teléfono, correo electrónico, y así sucesivamente. También hay una tabla en mi base de datos de SQL llamada tblEmployees con siete columnas etiquetadas algo similar. Mi objetivo es "convertir" a los resultados de una consulta a una lista genérica de los objetos de los empleados. ¿Cuál es la mejor manera de hacer esto (menor sobrecarga, lo más rápido)?

Lo que estoy haciendo actualmente es algo que he visto propuesto por toda la web. No me gusta porque me siento como que ralentiza mi carga la página. listas genéricas me hacen más rápido en lo que hago, pero no se sienten bien acerca de hacer mis clientes pagan el precio.

Esto es lo que estoy haciendo:

List<Employee> list = new List<Employee>();
DataSet ds = Employee.searchEmployees("Byron");
foreach (DataRow dr in ds.Tables[0].Rows)
{
   list.Add(new Employee(dr));
}

Tengo un constructor que toma un DataRow (como se muestra), que se encarga de la 'propiedad = dr [ "columna"]' materia.

Mirando hacia adelante a sus pensamientos.

¿Fue útil?

Solución

En pocas palabras mirando el código, y no ver cómo se utiliza, volvería un IEnumerator en lugar de una lista. A continuación, puede utilizar la instrucción de retorno de rendimiento y no se le bucle a través de la lista dos veces (una para poblar y uno para mostrar).

así que ...

protected IEnumerable<Employee> GetEmployees ()
{
   List<Employee> list = new List<Employee>();
   DataSet ds = Employee.searchEmployees("Byron");

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       yield return new Employee(dr);
   }
}

Otros consejos

¿Qué parte del proceso es lento se siente? Su metodología no tiene ningún cuellos de botella evidentes por lo que yo puedo ver.

I sugeriría el uso de un Mapper O como Linq2SQL o marco de la entidad

La razón de la construcción de una lista es para pasar entre las funciones en el lado del servidor.

¿Cuál es la ventaja de pasar la lista en lugar de pasar una referencia conjunto de datos o incluso un DataTable?

Estos pensamientos a un lado, lo que está haciendo actualmente es un procedimiento estándar para la construcción de una lista. ¿Cómo cree que se podría acelerarlo? Al no de instancias del objeto empleado? A continuación, tendría que prescindir del objeto Empleado que probablemente meterse con su modelado de entidad.

Lo que está haciendo ahora es algo que hay que hacer de una manera u otra en algún momento, y realmente no se puede hacer mucho más rápido que la forma en que usted ha descrito. Pero se puede reducir el número de veces que tiene que hacerlo en absoluto al almacenar en caché los datos.

Guarde la lista de clientes en la memoria caché. Poblarlo al iniciar la aplicación, por ejemplo. Cuando algo cambia un registro de cliente se actualiza el caché y guarda el registro de la base de datos. Cualquier lee por cualquier usuario irá a la caché, no la base de datos.

Este enfoque suele ser de un orden de magnitud más rápido que cualquier enfoque que golpea la base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top