¿Son "Query" y "QueryMultiple" de Dapper-dot-Net iguales en rendimiento y comportamiento al devolver un conjunto de resultados?

dapper

Pregunta

Recientemente, creamos una clase de mapeo, llamada TableMapperT, que encapsula nuestro Dapper multimap func. Construimos esto por separado de nuestro objeto 'comando', llamado TableCommand, que contiene información de texto SQL y tal. Para usarlo, sin embargo, tenemos que usar el 'QueryMultiple', que también sería necesario para devolver un solo resultado y luego asignarlo.

Hemos ejecutado métricas de rendimiento básicas y el rendimiento parece ser igual al de la api de Query normal (haciendo un bucle sobre la misma consulta con el mismo multimap pero con QueryMultiple usando 'Read ()'.

Entonces, la pregunta es, ¿hay una desventaja fundamental en el desempeño o el comportamiento al usar QueryMultiple para un único conjunto de registros? Parece que no, pero cree que la comunidad en general podría tener una mayor comprensión.

Sam Saffron indica que los resultados no están almacenados en esta publicación ( Dapper.NET y el proceso almacenado con múltiples conjuntos de resultados ), pero eso fue hace un tiempo y el código fuente parece que 'búfer' ahora es verdadero (público IEnumerable Read (bool tamponado) = verdadero).

El uso (a continuación) es muy limpio y nos permite modificar la conexión y el manejo de errores en un solo lugar, que es nuestro método de extensión 'Query' en un objeto IDatabase.

var command = new TableCommand(<SQL>,<Parameters>,<Timeout>);
var mapper = new TableMapper<OrderLineItem>();  //return type here
mapper.SetMap<OrderLineItem,Product>((oli,p)=>{oli.Product = p;return oli}); //input types here

return this.Database.Query(command,mapper);//returns IEnumerable<OrderLineItem>

Respuesta aceptada

El problema aquí no es el rendimiento, sino la conveniencia. La mayoría de las consultas, IMO, son una sola cuadrícula de resultados. Es más conveniente no tener que meterse con la complejidad adicional del escenario de múltiples lectores de cuadrícula, que es necesariamente más complejo porque cada cuadrícula puede tener una forma diferente y solo se pueden leer en un orden particular.

Saludos buffering:

  • Read<T> búfer Read<T> / Query<T> esa cuadrícula de forma predeterminada, aunque se puede desactivar para la transmisión completa
  • pero: las cuadrículas subsiguientes en la API de red múltiple solo se acceden a medida que se solicitan ; por lo tanto, la API de red múltiple debe utilizarse a su vez


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué