dapper.net, comment vider ConcurrentDictionary?

concurrentdictionary dapper

Question

Je suis nouveau à dapper et prévois de l'utiliser sur mon nouveau projet. Après l'avoir lu, le seul problème que je pourrais rencontrer est ConcurrentDictionary.

Dapper met en cache les informations relatives à chaque requête exécutée, ce qui lui permet de matérialiser rapidement les objets et de traiter rapidement les paramètres. L'implémentation actuelle met en cache ces informations dans un objet ConcurrentDictionary. Les objets stockés ne sont jamais vidés. Si vous générez des chaînes SQL à la volée sans utiliser les paramètres, il est possible que vous rencontriez des problèmes de mémoire. Nous pouvons convertir les dictionnaires en un cache LRU.

Comment puis-je éviter ce problème? Quelqu'un peut-il s'il vous plaît me montrer un code me dire comment et quand le vider?

Réponse acceptée

D'après les commentaires, voici un exemple à la volée:

var builder = new StringBuilder();
builder.AppendLine("SELECT Foo FROM Bar");
if (fisrtName != null || lastName != null)
    builder.AppendLine("WHERE");
if (firstName != null)
    builder.AppendLine("    Bar.FirstName = @Firstname");
if (firstName != null && lastName != null)
    builder.Append(" AND");
if (lastName != null)
    builder.AppendLine("    Bar.LastName = @LastName");
var sql = builder.ToString();

Comme vous pouvez le constater, le SQL réel que dapper exécutera sera différent selon que firstName et / ou lastName sont null. Si les deux sont nuls, vous obtenez une chaîne SQL. Si firstName n'est pas nul, vous en obtenez un autre. Si seulement lastName n'est pas nul, vous en obtenez encore un autre. Et enfin, si les deux ne sont pas nuls, vous obtenez une quatrième permutation.

C'est ce que l'on entend par "à la volée" - dapper mettra en cache ces permutations uniques, et vu un scénario plus complexe, il est facile de voir comment vous vous retrouverez avec beaucoup de permutations différentes, toutes dont il faudrait mettre en cache indépendamment.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi