Est-ce que "Query" et "QueryMultiple" de Dapper-dot-Net sont égaux en termes de performances et de comportement lors du retour d'un jeu de résultats?

dapper

Question

Nous avons récemment construit une classe de mappage, appelée TableMapperT, qui encapsule notre func multimap Dapper. Nous construisons ceci séparément de notre objet «commande», appelé TableCommand, qui contient des informations de type SQL et autres. Pour l'utiliser, nous devons cependant utiliser le "QueryMultiple" qui serait également nécessaire pour renvoyer un seul résultat et le mapper ensuite.

Nous avons exécuté des mesures de performance de base et les performances semblent être égales à l'API Query standard (en boucle sur la même requête avec le même multimap mais avec QueryMultiple en utilisant «Read ()»).

La question est donc la suivante: existe-t-il un inconvénient fondamental des performances ou du comportement lors de l’utilisation de QueryMultiple pour un seul jeu d’enregistrements? Il semble que non, mais a estimé que la communauté dans son ensemble pourrait avoir une plus grande compréhension.

Sam Saffron indique que les résultats ne sont pas mis en mémoire tampon dans cet article ( Dapper.NET et proc stocké avec plusieurs jeux de résultats ), mais il y a un certain temps et le code source a l'air = true).

L'utilisation (ci-dessous) est très propre et nous permet de manipuler la connexion et la gestion des erreurs en un seul endroit, c'est-à-dire notre méthode d'extension "Requête" sur un objet 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>

Réponse acceptée

Le problème n'est pas la performance, mais la commodité. La plupart des requêtes, IMO, sont une grille à résultat unique. Il est plus pratique de ne pas avoir à se soucier de la complexité supplémentaire du scénario de lecteur de grille multiple, qui est nécessairement plus complexe car chaque grille peut avoir une forme différente et ne peut être lue que dans un ordre particulier.

Regards buffering:

  • Read<T> / Query<T> tampon cette grille par défaut, même si elle peut être désactivée pour le streaming complet
  • mais: les grilles suivantes de l'API multi-grille ne sont accessibles que lorsqu'elles sont demandées - par conséquent, l'API multi-grille doit être utilisée à son tour


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi