dapper.net, cómo descargar ConcurrentDictionary?

concurrentdictionary dapper

Pregunta

Soy nuevo en dapper y planeo usarlo en mi nuevo proyecto. Después de leerlo, parece que el único problema que podría tener es ConcurrentDictionary.

Dapper almacena información en caché sobre cada consulta que ejecuta, esto 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 lavan. Si está generando cadenas de SQL sobre la marcha sin usar parámetros, es posible que tenga problemas de memoria. Podemos convertir los diccionarios a un LRU Cache.

¿Cómo evito este problema? ¿Alguien puede mostrarme algún código dime cómo y cuándo vaciarlo?

Respuesta aceptada

Según los comentarios arriba, aquí hay un ejemplo de sobre la marcha:

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();

Como puede ver, el SQL real que dapper ahora se ejecutará será diferente en función de si firstName y / o lastName son nulos. Si ambos son nulos, obtienes una cadena SQL. Si solo firstName no es nulo, obtendrá otro. Si only lastName no es nulo, obtienes otro. Y finalmente, si ambos no son nulos, obtienes una cuarta permutación.

Esto es lo que se entiende por "sobre la marcha": dapper guardará en memoria caché basado en estas permutaciones únicas, y dado un escenario más complejo, es fácil ver cómo terminará con muchas permutaciones diferentes, todas de lo cual necesitaría ser almacenado en caché de forma independiente.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow