Question

Je suis en train de refactoriser une application VB.NET existante pour utiliser Linq. J'ai réussi à le faire fonctionner, mais cela prend du temps (plus d'une minute) sur la machine cliente!

Ils ont beaucoup de lignes dans la table de base de données, mais l'ancienne version du programme sur le même ordinateur (qui utilise des ensembles de données) prend 5 secondes.

Mes requêtes Linq sont plutôt standard, comme suit:

Dim query = De t As TRANSACTION Dans db.TRANSACTIONs _
où t.transactionID = transactionID _
sélectionnez t

Ils ne renvoient qu'une ou deux lignes. Des pensées?

Était-ce utile?

La solution

Je suis surpris par l’énorme différence de temps (5 secondes à plus de 60 secondes). Je suppose que cela dépend de la complexité de l’entité TRANSACTION. LINQ to SQL traitera chaque ligne de votre jeu de résultats et le transformera en objet, puis ajoutera des informations de suivi d'état au DataContext. Un DataSet stocke simplement les données brutes et les traite en données fortement typées lorsque vous les lisez à partir du DataTable. Je ne m'attendrais pas à ce que le coût de L2S augmente de 12 fois, mais je m'attendrais à une certaine augmentation.

Autres conseils

Le code que vous avez collé n’accède pas du tout à la base de données. Ce que vous ferez ensuite avec "query" déterminera la quantité de données qui sera finalement transférée au client. Est-il possible que quelque chose que vous faites plus tard amène la version de LINQ à télécharger plus de données que la version du jeu de données?

J'ai effectué la même transition sur un projet et n'ai vu que des performances équivalentes ou meilleures de LINQ, mais il est arrivé que la version de LINQ fasse beaucoup plus d'allers-retours au serveur, par exemple. faire un compte () suivi par une extraction des données sous forme de deux requêtes de serveur distinctes. J'ai généralement résolu ce problème en faisant un .ToList () pour obtenir les données localement avant de travailler dessus. Vous devez parfois utiliser SQL Profiler pour découvrir ce qui se passe dans les coulisses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top