Lequel est le plus rapide: Entity Framework vs procédures stockées?

Quand il s'agit d'INSÉRER une grande quantité de données (disons 100.000 lignes) dans un object ARRAY, lequel pensez-vous que ce serait plus rapide?

  1. Grâce à Entity Framework? (appelez SaveChanges() quand vous avez inséré 100.000 lignes)
  2. Boucler chaque ligne (100.000 fois) avec une procédure stockée INSERT ?

Si vous pouviez également fournir une reference qui serait très printingnante.

Merci

Boucler 100K fois l'appel d'une procédure stockée créera au minimum un process croisé de 100K et / ou les appels inter-réseau seront lents.

Si vous utilisez le server SQL, vous pouvez également utiliser les TVP (parameters de valeur de table ) pour éviter d'insert l'insertion dans une boucle à partir de votre code C #. Il vous permet de passer une table de données à une procédure stockée en un seul appel.

À partir du lien ci-dessus, ils recommandnt 1000 lignes à la fois (mais mesurent et expérimentent toujours pour votre application):

L'utilisation de parameters de table est comparable à d'autres façons d'utiliser des variables basées sur des sets; cependant, l'utilisation de parameters de table peut souvent être plus rapide pour les grands sets de données. Par rapport aux opérations en masse qui ont un coût de démarrage plus élevé que les parameters de table, les parameters de table fonctionnent bien pour l'insertion de less de 1 000 lignes.

Donc, peut-être essayer de faire une boucle 100 fois en passant 1000 lignes à la fois (au lieu de traverser la frontière 100K fois).

Vous pourriez également vouloir réévaluer pourquoi asp.net a 100K éléments à la fois dans votre application. Est-ce que cela est passé au server et conservé en memory à la fois avec d'éventuels problèmes de memory? Est-ce que cela peut être brisé? Est-ce que vous faites du traitement de données où asp.net lit et traite 100K lignes où un travail d'agent server sql pourrait être plus approprié? Si vous fournissez plus de détails sur le stream de données de votre application et ce qu'elle fait, les gens pourraient être en mesure d'offrir plus d'options.

La procédure stockée sera plus rapide. Entity Framework n'a pas de traitement par lots, vous subissez donc les pertes de performances de EF en plus de toucher la database 100k fois. Raw ado va être plus rapide qu'un ORM pour ce genre de choses.

Voici un lien de quelques comparaisons http://blog.staticvoid.co.nz/2012/03/entity-framework-comparative.html Il n'a pas ado.net cru dans la comparaison mais dapper est le plus proche que vous verrez à vitesse à cela.

En fait le moyen le plus rapide est d'utiliser l'object SqlBulkCopy, qui est conçu exactement pour cette situation