Entity Framework est Trop Lent. Quelles sont mes options?

J'ai suivi le "Ne pas Optimiser Prématurément" mantra et codé mon Service WCF à l'aide de Entity Framework.

Cependant, j'ai dressé le portrait de la performance et Entity Framework est trop lent. (Mon app processus de 2 messages dans environ 1,2 secondes, où l' (héritage) app que je suis re-écriture ne 5-6 messages en même temps. (L'héritage appels app sprocs pour son DB Access).

Mon profilage des points à l'Entité Cadre de la prise de la majeure partie du temps par message.

Alors, quelles sont mes options?

  • Sont là, mieux Orm là?

    (Quelque chose qui prend en charge normale de la lecture et de l'écriture des objets et il le fait vite..)

  • Est-il un moyen de faire de l'Entité Cadre plus vite?

    (Note: quand je dis que plus vite je veux dire sur le long terme, pas le premier appel. (Le premier appel est lente (15 secondes d'un message), mais ce n'est pas un problème. J'ai juste besoin d'être rapide pour le reste des messages.)

  • De mystérieux 3ème option qui va m'aider à obtenir plus de vitesse de mon service.

REMARQUE: la Plupart de mes DB interactions sont de Créer et de mettre à Jour. Je ne fais que très très peu de sélection et suppression d'.

  • Cela sonne comme une resucée de "linq est lent" comment savez-vous qu'il est EF? Avez-vous profilé toutes vos modifications?
  • Certaines réponses sont pointant vers les requêtes. Dans mon expérience, la lenteur dans l'EF a peu à voir avec les requêtes, mais avec les coûts de réalisation, et que ces coûts sont souvent liés à la modification de suivi et comment cela influe sur l'instance(s) de création. Malheureusement, je n'ai pas de solution miracle pour vous donc c'est juste un commentaire, mais je vous recommande de voir si le profilage révèle haute matérialisation des coûts et, le cas échéant, de la recherche de ce qui peut être fait au sujet de ces coûts.
  • J'ai pensé que j'ai indiqué que j'avais profilé et trouvé que c'était EF/DB qui était lent. De toute façon, oui je l'ai fait. Je profilé et il est EF/DB interactions qui sont les principaux coupables.
  • N'est-ce pas la matérialisation de la première exécution genre de choses? Si oui, vous avez raison, il est très lent. La première manche est super lent. Mais comme je l'ai indiqué, je ne suis pas trop inquiet à ce sujet. C'est le débit total qui est le problème. (Si ce n'est pas ce Matérialisation est que j'ai besoin donc quelques recherches pour voir si c'est la cause de mon problème)
  • non, la matérialisation est le processus de prise de données à partir de la base de données et l'instanciation et de remplir le graphe d'objets pour représenter ces données. Je ne parle pas de la première exécution de la performance, comme le code est jitted (ou même comme Sql Server peut créer le plan d'exécution de requête), mais ce qui se passe à chaque fois que vous obtenir les données sous forme d'objets.
  • Je vais regarder dans le. Peut-être il ya un moyen à la vitesse maximum.
  • J'aimerais vraiment vous recommander d'aller dans les détails ce qu'est exactement le code que vous écrivez pour insérer et mettre à jour des entités (de préférence dans une nouvelle question d'équité pour les personnes qui ont déjà répondu à votre question en cours) avant que vous pensez de mesures radicales comme le changement de l'ORM. Vous ne dites pas quelle est la version de EF vous utilisez, si vous utilisez POCOs, si vous utilisez des proxies dynamiques, si vous avez la détection automatique des changements activé, etc. J'ai vu dans ma propre insérer/mettre à jour le code différences de performances par un facteur 50 (= cinquante) selon sur de tels détails.
  • Quelques liens à propos de ce que je veux dire avec mon commentaire précédent: 1) stackoverflow.com/q/5943394/270591 2) stackoverflow.com/q/5917478/270591 3) stackoverflow.com/q/5940225/270591, 4) stackoverflow.com/q/5798646/270591. Aucun d'entre eux ou de la totalité d'entre eux pourraient être applicables à votre situation. Il dépend seulement sur les détails de vos paramètres et votre code.
  • Entity Framework est beaucoup plus rapide dans le .net 4.5 outofmemory.co.royaume-uni/...
  • pour les premières, il est plus rapide... Pas beaucoup est fait pour que la normal "au milieu de l'app" de traitement.
  • Entity Framework est lent? Je ne pense pas. Stackoverflow est de travailler la preuve. Si il y a un problème avec EF avoir anormale de la latence c'est avec le développeur. Simple que cela.
  • Je suis impliqué avec une grande application à l'aide de EF et les requêtes SQL qu'il génère peut être très lent. Je ne dis pas de ne pas l'utiliser, mais être préparé à l'étape et utiliser des procédures stockées lorsque vous avez des problèmes. Les procédures stockées peuvent encore être appelé à partir d'EF et vous ne pouvez pas encore de test de l'unité et de l'utilisation d'un modèle de référentiel etc Cela suppose que vous avez confirmé le SQL est le problème.
  • EF a été vraiment conçu pour être flexible avec toute source de données et qui est son plus grand pouvoir, cependant, si vous êtes toujours à l'aide de MS-SQL, il n'y a pas beaucoup de point à ne pas utiliser des procédures stockées w/EF (et, peut-être, ne pas utiliser EF - comme il ajoute certainement la plus "qu'est ce qu'il fait maintenant?" des questions dans le processus de développement). Si vous détestez l'obfuscation ou besoin d'amende à l'écoute de contrôle, EF n'est pas pour vous. Sur vraiment de projets complexes EF, honnêtement, prend plus de temps à déboguer, en général (et plus facile à frire d'une base de données!).

InformationsquelleAutor Vaccano | 2011-12-01