2010-12-11 21 views
5

J'ai une procédure stockée de recherche qui est mon goulot d'étranglement des performances.La procédure stockée appelée à partir de C# s'exécute 6 fois plus longtemps qu'à partir de SQL Management studio

Afin de contrôler ce qui s'est passé, j'ai ajouté la journalisation pour tous les paramètres et le temps d'exécution dans SP.

Je remarquai que quand je l'appelle SP de la gestion du serveur Microsoft SQL temps d'exécution Studio est 1,3-1,6 secondes, mais quand je l'appelle de C#, il prend 6-8 secods (!!!)

Parameters               | Time (ms) 
"tb *"TreeType:259Parents:212fL:13;14fV:0;lcid:2057min:0max:10sort:-1 | 6406  
"tb *"TreeType:259Parents:212fL:13;14fV:0;lcid:2057min:0max:10sort:-1 | 1346  

SP est appelé avec LINQ. Les paramètres de connexion sont les mêmes. SP utilise la recherche plein texte

Ce qui pourrait causer cela?

+0

Je ne suis pas sûr en ce qui concerne le système de mise en cache Microsoft SQL. Essayez d'exécuter la procédure stockée à partir du studio de gestion, puis de C#. Les résultats seront-ils différents du courant? – Anton

+0

@Anton: Je peux obtenir les mêmes résultats ne dépendant pas de l'ordre des appels. En fait, cette liste est triée par id desc, donc la dernière requête est la dernière. – st78

+0

Avez-vous essayé d'utiliser 'SqlCommand' au lieu de LINQ? Vous pouvez utiliser la méthode 'Prepare' en plus. Utilisez-vous SQL Server local? Quelles données renvoie la procédure stockée? – Oleg

Répondre

2

Afin de localiser ces problèmes, le meilleur outil est SQL Profiler, qui enregistre l'appel exact à la base de données.

Pour moi, la différence était avec novalue transmis par l'exemple SQL, qui a été remplacé par '' et la valeur nulle transmise par C#.