Renifleur de paramètres EF 6
Lorsque vous travaillez avec des requêtes dynamiques volumineuses dans EF 6, vous pouvez rencontrer des problèmes de performances dus au reniflage de paramètres. Cela se produit lorsque le moteur de base de données conserve le plan d'exécution d'une requête avec un ensemble spécifique de paramètres et l'applique aux exécutions ultérieures, même si les paramètres ont changé.
Pour résoudre ce problème, EF 6 fournit une fonctionnalité d'interception. qui vous permet de manipuler les commandes SQL avant leur exécution. Cela vous permet d'intégrer des options telles que "OPTION RECOMPILE" dans la commande.
Pour utiliser cette fonctionnalité, implémentez [IDbCommandInterceptor](https://docs.microsoft.com/en-us/dotnet/api /entityframework/system.data.entity.infrastructure.idbcommandinterceptor?view=ef6) et remplacez l'interface Méthode [ReaderExecuting](https://docs.microsoft.com/en-us/dotnet/api/entityframework/system.data.entity.infrastructure.idbcommandinterceptor.readerexecuting?view=ef6). Dans cette méthode, vous pouvez ajouter l'indice de requête souhaité à la commande.
Voici un exemple d'implémentation d'un intercepteur qui ajoute l'indice "OPTION RECOMPILE" pour sélectionner des requêtes :
public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor { public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> 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 l'intercepteur, ajoutez la ligne suivante au début de votre application :
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
Cela garantira que l'indice "OPTION RECOMPILE" est ajouté à toutes les requêtes de sélection exécutées via EF 6, atténuant ainsi l'impact du reniflage des paramètres.
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!