Différence de time d'exécution de la procédure stockée SQL

J'ai un problème étrange dans mon application win-form où j'appelle une procédure stockée et il faut environ 6 secondes pour exécuter. (Cette procédure stockée accepte plusieurs parameters dont un paramètre de sortie)

Du niveau de l'application j'ai utilisé:

Dim dt1 = DateTime.Now cmd.ExecuteNonQuery() MessageBox.Show(DateTime.Now.Subtract(dt1).Seconds) 

C'est environ 5-6 secondes

J'ai essayé d'exécuter la même procédure stockée avec les mêmes parameters sur sql-server et cela ne prend pas le time de s'exécuter:

 declare @val decimal exec mysp 'value1','value2','value3','value4',@val out select @val 

Je ne suis pas sûr de savoir quel est le problème ou par où commencer.

Le problème avec la différence entre appel SP directement et à partir du code. NET, peut-être en raison de reniflage des parameters. SQL Server peut mettre en cache un plan d'exécution qui n'est pas optimal pour les parameters que vous transmettez du code.

Pour éviter cela, essayez d'append WITH RECOMPILE à votre définition SP, par exemple

 CREATE PROCEDURE MySP ( ... parameters... ) WITH RECOMPILE AS BEGIN ... 

Cela peut poser un problème si votre procédure stockée s'attend à dire nvarchar et que vous utilisez un varchar. Le server SQL acceptera les parameters mais sera forcé de faire une conversion. Avez-vous plus de détails?