Pregunta

¿Alguien puede explicar lo que esto significa (del sitio web dapper.net)

Limitaciones y advertencias

Dapper almacena información sobre cada consulta que se ejecuta, esto le permite materializar objetos rápidamente y procesar los parámetros rápidamente. La implementación actual almacena esta información en un objeto concurrente. Los objetos que almacena nunca se enjuagan. Si está generando cadenas SQL en la marcha sin usar parámetros, es posible que presione los problemas de memoria. Podemos convertir los diccionarios en un caché LRU.

No puedo entender lo que significa la línea en negrita. Estoy usando SQL Server y C# Client.

¿Alguien puede dar una muestra del código C# que cree este problema de memoria? gracias

¿Fue útil?

Solución

Si está generando cadenas SQL en la marcha sin usar parámetros, es posible que presione los 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. El primero no está parametrizado. Se almacenará en caché cada vez que escriba una consulta como esta con un valor diferente para email. Esto explotará tu memoria.

Este último es muy superior. Evita los ataques de inyección. Dapper puede almacenarlo en caché una vez. SQL Server compilará el plan de ejecución una vez y caché.

Debería (imperativo) estar utilizando consultas parametrizadas. Si no lo es, deje todo lo que está haciendo y haga de esta una prioridad inmediata.

¿Alguien puede dar una muestra del código C# que cree este problema de memoria? gracias

Solo haz el primero en un bucle. Observe crecer su memoria. Haz este último en un bucle. Mira tu memoria no crece.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top