40 votes

Est-il rien de plus rapide que SqlDataReader dans .NET?

J'ai besoin de charger une colonne de chaînes à partir de la table sur SqlServer dans un Tableau en mémoire à l'aide de C#. Est-il un moyen plus rapide que de les ouvrir SqlDataReader et boucle à travers elle. La Table est grande et que le temps est critique.

MODIFIER Je suis en train de construire .dll et l'utiliser sur le serveur pour certaines opérations sur la base de données. Mais il est trop lente pour l'instant. Si c'est plus rapide que ce que j'ai à la refonte de la base de données. J'difficile il y a peut être une solution pour augmenter la vitesse truc.

54voto

badbod99 Points 3588

Lecteur De Données

À propos de l'accès le plus rapide, vous obtiendrez de SQL est avec le SqlDataReader.

Profil

Ça vaut réellement le profilage où votre problème de performance. Généralement, lorsque vous pensez que le problème de performance, est avéré être tout à fait tort, après que vous avez profilé elle.

Cela pourrait être par exemple:

  1. Le temps... la requête à exécuter
  2. Le temps... les données nécessaires à la copie de l'ensemble du réseau/processus boundry
  3. Le temps... .Net prend pour charger les données dans la mémoire
  4. Le temps... votre code nécessaire pour faire quelque chose avec elle

Le profilage de chacun de ces éléments dans l'isolement pour vous donner une meilleure idée de l'endroit où votre goulet d'étranglement. Pour le profilage de votre code, il y a un grand article à partir de Microsoft

Cache

La chose à regarder pour améliorer les performances, c'est de savoir si vous avez besoin de charger toutes les données à chaque fois. La liste (ou une partie) être mis en cache? Regardez le nouveau Système.Moment de l'exécution.La mise en cache de l'espace de noms.

Réécrire comme en T-SQL

Si vous faites purement opérations sur les données (comme votre question le suggère), vous pouvez ré-écrire votre code en utilisant les données pour être en T-SQL et s'exécutent en mode natif sur SQL, cela a le potentiel d'être beaucoup plus rapide que vous allez travailler avec les données directement et de ne pas les déplacer sur.

Si votre code a beaucoup de nessecary logique procédurale vous essayez de mélanger T-SQL CLR Intégration de vous donner les avantages des deux mondes.

Beaucoup cela vient de la complexité (ou plus nature procédurale) de votre logique.

Si tout le reste échoue

Si toutes les zones sont optimales (ou au plus près), et de votre conception est sans faute. Je ne serais même pas entrer dans la micro-optimisation, je venais de jeter le matériel à elle.

Quel est le matériel? Essayez la fiabilité et analyseur de performances de trouver où le col de la bouteille est. Le plus probable de la place pour le problème que vous décrivez disque dur ou de la mémoire RAM.

19voto

Steven Points 56939

Si SqlDataReader n'est pas assez rapide, peut-être vous devriez stocker vos affaires ailleurs, comme un (en mémoire cache.

17voto

TomTom Points 35574

Pas de. Il est en fait non seulement le moyen le plus rapide - il est le SEUL (!) façon. Tous les autres mécanismes d'utiliser à l'INTERNE un DataReader de toute façon.

9voto

LukeH Points 110965

Je soupçonne qu' SqlDataReader est à peu près aussi bon que vous allez obtenir.

5voto

Pratik Points 5401

SqlDataReader est le moyen le plus rapide. Assurez-vous d'utiliser les obtenir par ordinale méthodes plutôt que par le nom des colonnes. par exemple, GetString(1);

Aussi le détour est d'expérimenter avec MinPoolSize dans la chaîne de connexion de sorte qu'il y a toujours quelques connexions dans le pool.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X