Question

Quelqu'un peut-il expliquer s'il vous plaît ce que signifie (à partir du site Dapper.net)

Limites et mises en garde

Dapper met en cache des informations sur toutes les requêtes qu'il fonctionne, cela lui permettent de matérialiser des objets rapidement et paramètres de processus rapidement. L'implémentation actuelle met en cache ces informations dans un objet ConcurrentDictionary. Les magasins sont des objets il ne rincées. Si vous générez des chaînes SQL à la volée, sans l'aide de paramètres, il est possible que vous frapperez des problèmes de mémoire. Nous peut convertir les dictionnaires à un cache LRU.

Je ne suis pas en mesure de comprendre ce que la ligne en gras signifie. J'utilise SQL Server et c # client.

Quelqu'un peut-il s'il vous plaît donner un échantillon de code C # qui va créer ce problème de mémoire. merci

Était-ce utile?

La solution

Si vous générez des chaînes SQL à la volée, sans l'aide de paramètres, il est possible que vous frapperez des problèmes de mémoire.

Vous pouvez faire ceci:

cmd.CommandText = "SELECT email, passwd, login_id, full_name " + 
                  "FROM members " +
                  "WHERE email = '" + email + "'";

ou vous pouvez faire ceci:

string s = "SELECT email, passwd, login_id, full_name " + 
           "FROM members WHERE " +
           "email = @email";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@email", email);

Ce dernier est paramétré. Il sera mis en mémoire cache une fois. Le premier n'est pas paramétrés. Il sera mis en mémoire cache chaque fois que vous écrivez une requête comme avec une valeur différente pour email. Cela va exploser votre mémoire.

Ce dernier est largement supérieure. Il évite les attaques par injection. pimpant peut mettre en cache une fois. SQL Server établira le plan d'exécution une fois et mettre en cache.

Vous devriez (impératif) déjà utilisés dans les requêtes paramétrées. Si vous n'êtes pas, laissez tomber tout ce que vous faites et en faire une priorité immédiate.

Quelqu'un peut-il s'il vous plaît donner un échantillon de code C # qui va créer ce problème de mémoire. merci

Il suffit de faire le premier dans une boucle. Surveillez votre mémoire grandir. Faites ce dernier dans une boucle. Surveillez votre mémoire ne poussent pas.

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