Question

Je travaille sur un programme .NET qui exécute des scripts arbitraires contre une base de données.

Quand un colleage a commencé à écrire le code d'accès de base de données, il a exposé simplement un objet de commande au reste de l'application qui est réutilisée (réglage CommandText / Type, appelant ExecuteNonQuery() etc.) pour chaque instruction.

J'imagine que c'est un succès important de performance pour des déclarations répétées, identiques, parce qu'ils sont analysés à nouveau chaque fois.

Ce que je me demande, cependant, est la suivante: ce sera aussi dégrader la vitesse d'exécution si chaque projet est différent du précédent (non seulement des paramètres différents, mais une déclaration tout à fait différente)? Je ne pouvais pas trouver facilement une réponse à ce sujet dans la documentation.

BTW, le SGBDR utilisé est Oracle, mais je suppose que cette question n'est pas vraiment base de données spécifique.

P.S. Je sais d'exposer le même objet Command est pas thread-safe, mais ce n'est pas un problème ici.

Était-ce utile?

La solution

Il y a certains frais généraux impliqués dans la création de nouveaux objets de commande, et ainsi, dans certaines circonstances, il peut être judicieux de réutiliser la même commande. Mais comme le cas général pour une application exécutée ensemble il semble plus un peu bizarre.

Autres conseils

La performance due provient généralement d'établir une connexion à la base de données, mais ADO.NET crée un pool de connexion pour aider ici.

Si vous souhaitez éviter les déclarations d'analyse à chaque fois de nouveau, vous pouvez les mettre dans les procédures stockées.

J'imagine que votre collègue utilise une approche juste de style ancien qu'il a hérité de travailler sur d'autres plates-formes où la réutilisation d'un objet de commande a fait une différence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top