2009-12-16 7 views
2

J'utilise LINQ to SQL pour accéder à la base de données (SQL Server 2005). Le premier appel prend jusqu'à 10 secondes pour récupérer les données, un second appel prend moins d'une seconde. Que peut-on faire pour améliorer les performances du premier appel à la base de données? L'action de base de données se produit dans le contrôleur d'une application mvc asp.net.LINQ to SQL: Premier appel

Merci

+0

Merci à tous. Voici comment j'ai résolu le système "lent": Les liens entre les classes Linq2SQL ont fait que le système sous-jacent a chargé beaucoup de données qui n'étaient pas vraiment nécessaires pour ma vue. J'ai réécrit les requêtes LINQ et stocké le résultat dans des objets de transfert de données personnalisés. De cette façon, l'application fonctionne beaucoup plus vite maintenant. – Martin

Répondre

0

Je ne sais pas ce genre de délai d'attente est LINQ ou ASP.NET lié. Notez-vous également le délai d'attente lors de l'utilisation de la base de données avec ADO.NET?

+1

C'est deviner, mais je suppose aussi que c'est la compilation ASP qui cause le retard au début. – Onots

+0

Désolé, je suis assez nouveau dans ce sujet. Est-il facile de passer à ADO.NET pour comparer les performances? – Martin

+0

Oui, écrivez simplement un petit programme de console et vérifiez l'exemple de code dans MSDN. Jetez un oeil aux classes SqlConnection, SqlCommand, SqlReader. –

1

Je crois que ce que vous rencontrez est SQL Server en cache la requête et est normal. Maintenant, si les 10 secondes d'origine sont trop, alors vous devez capturer la requête sql (je suggère le profileur) et ensuite l'examiner. Dans le passé, je courais le sql dans la console de gestion avec le plan d'exécution réel show sélectionné. Il existe des ressources sur le Web pour expliquer comment le lire, mais cela devrait vous aider à trouver le goulot d'étranglement. Je veux dire qu'il est normal que les requêtes de longue durée accélèrent après avoir été exécutées une seule fois, car SQL Server met en cache la requête (je crois que le plan d'exécution est exact) pour une utilisation ultérieure.

Wade

+0

Merci, la requête est assez simple, donc je suppose que c'est une chose SQL Server. J'ai lu à propos de la "génération de vue" qui prend plus de la moitié de la durée de la requête. Il est possible de pré-générer l'affichage avec EdmGen.exe, mais ce n'est pas possible dans L2S ... – Martin

0

Je doute beaucoup LINQ to SQL est le coupable ici. Pouvez-vous publier le L2S T-SQL est en cours de génération, avec des lignes de comptage et des informations sur l'indexation?

+0

Je suis désolé, mais je n'ai pas les droits d'utilisateur suffisants sur la base de données pour exécuter le profileur de serveur sql. Mais comme je l'ai écrit ci-dessus, la requête n'est pas complexe du tout. La chose étrange est qu'un deuxième appel sur les mêmes tables est beaucoup plus rapide ... – Martin

+0

Le deuxième appel est plus rapide en raison de la mise en cache (comme indiqué par Wade73). Je suis d'accord avec beaucoup d'autres affiches, si 10 secondes est trop lent, le correctif va indexer les tables que vous interrogez. Gardez à l'esprit que les requêtes simples peuvent prendre beaucoup de temps aussi; le temps de traitement est fonction du nombre de lignes dans la table, du nombre de lignes renvoyées, du traitement requis sur les lignes renvoyées (tri, regroupement, etc.) et des index disponibles pour récupérer les lignes. –

+0

Merci Jeff, je vais essayer d'indexer les tables et je reviendrai plus tard. – Martin

0

Je pense que ce que vous rencontrez est le processus de compilation Asp.Net la première fois que la page est chargée, pas un problème de performances avec LTS. Une façon de mesurer les performances est de le profiler avec le Linq to Sql Profiler. Il vous dira exactement quelle est la requête qui est générée ainsi que les temps d'exécution pour la requête et votre code.