c# - sqlmapper - net dapper
Cómo vaciar periódicamente el caché de dapper.net cuando se usa con SQL Server (1)
Alguien puede explicar qué significa esto (del sitio web Dapper.net)
Limitaciones y advertencias
Dapper almacena información sobre cada consulta que ejecuta, lo que le permite materializar objetos rápidamente y procesar parámetros rápidamente. La implementación actual almacena en caché esta información en un objeto ConcurrentDictionary. Los objetos que almacena nunca se tiran. Si está generando cadenas SQL al vuelo sin utilizar parámetros, es posible que tenga problemas de memoria. Podemos convertir los diccionarios a un caché LRU.
No puedo entender lo que significa la línea en negrita. Estoy usando SQL Server y c # cliente.
Alguien puede dar una muestra del código c # que creará este problema de memoria. gracias
Si está generando cadenas SQL al vuelo sin utilizar parámetros, es posible que tenga problemas de memoria.
Puedes hacerlo:
cmd.CommandText = "SELECT email, passwd, login_id, full_name " +
"FROM members " +
"WHERE email = ''" + email + "''";
o puedes hacer esto:
string s = "SELECT email, passwd, login_id, full_name " +
"FROM members WHERE " +
"email = @email";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@email", email);
Este último está parametrizado. Se almacenará en caché una vez. Lo primero no está parametrizado. Se almacenará en caché cada vez que escriba una consulta similar con un valor diferente para el email
. Esto explotará tu memoria.
Este último es muy superior. Evita los ataques de inyección. Dapper puede guardarlo en caché una vez. SQL Server compilará el plan de ejecución una vez y lo almacenará en caché.
Debe (imperativo) ya estar utilizando consultas parametrizadas. Si no lo está, deje todo lo que está haciendo y haga de esto una prioridad inmediata.
Alguien puede dar una muestra del código c # que creará este problema de memoria. gracias
Solo haz lo primero en un bucle. Mira crecer tu memoria. Haga lo último en un bucle. Mira tu memoria no crecer.