Pregunta

Soy nuevo en SubSonic y Linq Stuff y estoy intentando descubrir la forma más corta y óptima de recuperar un solo registro.

¿Qué otra forma es más rápida y requiere menos código para escribir que esto para obtener un solo registro?

User user2 = DB.Select().From(User.Schema)
.Where(User.PasswordColumn).IsEqualTo(password)
.And(User.SINumberColumn).IsEqualTo(siNumber)
.ExecuteSingle<User>();

He usado la herramienta AntsProfiler para verificar, y esto toma un promedio de 29.12 ms de tiempo de CPU, probado en diez ejecuciones

Donde ya que esto lleva aún más tiempo

UserController uc = new UserController();
Query query = new Query("User");
query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);   
User user = uc.FetchByQuery(query).First<User>();

Solo la última línea tarda 256.08ms de tiempo de CPU más UserController tarda 66.86ms.

¿Alguna sugerencia?

¿Fue útil?

Solución

IIRC, el objeto Consulta es fluido ... es decir,

query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);

Debería leerse como:

query = query.WHERE(User.Columns.Password, password);
query = query.WHERE(User.Columns.SINumber, siNumber);

El aumento del tiempo en sus pruebas puede explicarse por esto (está solicitando todos los elementos de Usuario y luego tomando el Primero).

Otros consejos

El "cuello de botella" sería la consulta generada ejecutándose, no SubSonic generándola o devolviendo el resultado. Si una consulta en particular es lenta, debe considerar el uso de las funciones de indexación de su proveedor de base de datos para optimizarla.

En el segundo caso, supongo que el tiempo de ejecución adicional está sobrecargado para que LINQ devuelva el primer elemento de la colección.

Entonces, mi respuesta sería, la primera forma es la mejor manera de hacerlo, y si 29ms no es aceptable (lo que para una llamada a un DB, no creo que sea irrazonable), agregue algunos índices en su DB para acelerar la recuperación.

Creo que John tiene razón en el dinero. Si realmente desea probar SubSonic para ver cuánto tiempo necesita, debe probar cuánto tiempo lleva subsónico crear la instrucción SQL, no cuánto tiempo le lleva a SubSonic crear la instrucción SQL y cuánto tiempo le toma a su DB devolver los resultados. al mismo tiempo (necesita aislar sus pruebas).

Tal vez debería probar cuánto tiempo se tarda en obtener los resultados con un SQLCommand antiguo regular y pasarle su conexión y parámetros y ver cuánto tiempo tarda para que pueda hacer una comparación.

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