Temps d'exécution très différents de la requête SQL dans C # et SQL Server Management Studio

J'ai une requête SQL simple qui, lorsqu'elle est exécutée à partir de C #, prend plus de 30 secondes, puis expire à chaque fois, tandis que lorsqu'elle est exécutée sur SQL Server Management Studio, elle se termine immédiatement. Dans ce dernier cas, un plan d'exécution de requête ne révèle rien de troublant, et le time d'exécution est bien réparti grâce à quelques opérations simples.

J'ai exécuté ' EXEC sp_who2 ' pendant que la requête s'exécute à partir de C #, et il est listé comme prenant 29 000 millisecondes de time CPU, et n'est pas bloqué par quoi que ce soit.

Je n'ai aucune idée de comment commencer à résoudre cela. Quelqu'un a-t-il un aperçu?

La requête est:

 SELECT c.lngId, ... FROM tblCase c INNER JOIN tblCaseStatus s ON s.lngId = c.lngId INNER JOIN tblCaseStatusType t ON t.lngId = s.lngId INNER JOIN [Another Database]..tblCompany cm ON cm.lngId = cs.lngCompanyId WHERE t.lngId = 25 AND c.IsDeleted = 0 AND s.lngStatus = 1 

Pour commencer, extraire le plan de requête de la requête quand il est exécuté à partir de C #:

 select p.query_plan, * from sys.dm_exec_requests r cross apply sys.dm_exec_query_plan(r.plan_handle) p where r.session_id = <spid of C# connection> 

Puis comparez-le avec le plan exécuté sous la session SSMS (il suffit de cliquer sur Afficher le plan actuel dans la barre d'outils).

Et, en règle générale, essayez toujours d'appliquer une approche méthodique plutôt que de deviner. Wait and Queues est une très bonne méthodologie de dépannage des performances éprouvée pour SQL Server.