Solution de reniflage de paramètres EF 6 : surmonter le délai d'attente des requêtes
Malgré l'efficacité du SQL généré par votre requête LINQ to Entities, son exécution via EF 6 entraîne un délai d’attente de requête persistant. Cela est probablement dû au reniflage de paramètres, une technique d'optimisation des performances utilisée par le moteur de base de données. Mais vous ne pouvez pas simplement ajouter une commande "OPTION RECOMPILE" directement à votre requête EF.
Solution : Utiliser l'interception EF
EF 6 offre une fonctionnalité d'interception qui permet vous de manipuler les commandes SQL avant qu'elles ne s'exécutent sur la base de données. En implémentant un DbCommandInterceptor personnalisé, vous pouvez ajouter des indicateurs de requête, notamment « OPTION RECOMPILE », aux commandes internes.
Voici l'implémentation d'un tel intercepteur :
public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor { public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext) { addQueryHint(command); } public void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext) { addQueryHint(command); } private static void addQueryHint(IDbCommand command) { if (command.CommandType != CommandType.Text || !(command is SqlCommand)) return; if (command.CommandText.StartsWith("select", StringComparison.OrdinalIgnoreCase) && !command.CommandText.Contains("option(recompile)")) { command.CommandText = command.CommandText + " option(recompile)"; } } }
Pour utiliser cet intercepteur , ajoutez simplement la ligne suivante au début de votre candidature :
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
Cela garantira que tous Les commandes SQL générées par EF sont accompagnées de l'indication "OPTION RECOMPILE", empêchant le reniflage des paramètres et améliorant les performances des requêtes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!