J'ai des problèmes de performance avec Linq2Sql par rapport à ADO.NET brut qui m'a conduit dans le chemin des requêtes compilées. J'ai jusqu'ici jusqu'à présentComment écrire des requêtes compilées Linq2Sql dynamiques?
public static readonly Func<MyDataContext, WebServices.Search.Parameters, IQueryable<image>>
Compiled_SelectImagesLinq =
CompiledQuery.Compile<MyDataContext, WebServices.Search.Parameters, IQueryable<image>>(
(dc, parameters) => from i in dc.images
join l in dc.links on i.image_id equals l.image_id
join r in dc.resolutions on i.image_id equals r.image_id
where i.image_enabled == true && i.image_rating >= parameters.MinRating
&& i.image_rating <= parameters.MaxRating
select i
);
Cependant, je ne peux pas comprendre comment ajouter les paramètres supplémentaires en option à la requête que je fais actuellement
if (parameters.Country != null)
{
query = query.Where(x => x.image_country_id == parameters.Country);
}
if (parameters.ComponentId != null)
{
query = query.Where(x => x.links.Any(l => l.link_component_id == parameters.ComponentId));
}
etc, etc
I essayé d'écrire une autre fonction qui fait
var query = Compiled_SelectImagesLinq(parameters);
puis en ajoutant les paramètres supplémentaires à la requête et le retour
return query.Distinct().Take(parameters.Results);
Bit cela ne semble pas juste et renvoie aucun résultat
La requête sera exécutée 1000 fois par jour. Les paramètres sont générés à la suite d'un appel à un service Web à partir de pages Web afin de récupérer des images pertinentes à partir d'un stockage en nuage basé sur plusieurs critères. J'espère que cela a du sens. Je commence à penser que j'essaye de forcer le problème de Linq et je devrais juste utiliser Raw ADO pour la performance et la recherche d'index de texte libre plus simple –
Mais combien de fois sera-t-il recompilé par jour? Allez-vous tenir la requête compilée en mémoire quelque part? En outre, chaque requête dynamique sera exécutée des milliers de fois par jour? En outre, je suis curieux de savoir comment les performances des requêtes peuvent faire la différence lorsque vous devez télécharger des images (le temps de transfert n'est-il pas beaucoup plus long que l'heure de la requête?). Je n'essaie pas de critiquer votre design, je suis juste intrigué par l'idée d'une situation qui nécessite ces caractéristiques. – marr75