Cette question est un peu vieux, mais peut-être cela est de toute utilisation:
Lorsque vous utilisez les requêtes natives, essayez de définir un point d'arrêt sur l'expression lambda. Si le point d'arrêt est réellement appelé, vous rencontrez des problèmes car l'optimisation a échoué. Pour invoquer le lambda, chacun des objets devra être instancié ce qui est très coûteux.
Si l'optimisation a fonctionné, l'arbre d'expression lambda sera analysé et le code réel ne sera pas nécessaire, ainsi les points d'arrêt ne seront pas déclenchés.
Notez également que les paramètres des index sur les champs doivent être effectués avant d'ouvrir la connexion.
Enfin, j'ai un cas test d'objets simples. Quand j'ai commencé sans optimisation de requête et d'indexation (et pire, en utilisant un serveur qui a été obligé d'utiliser le GenericReflector
parce que j'ai échoué à fournir le modèle .dlls), c'est aussi 600s pour une requête à trois critères sur environ 100.000 objets. Maintenant, il faut 6s pour la même requête sur les objets 2.5M donc il y a vraiment un énorme gain.
fyi cela s'est produit en utilisant une requête native –