dapper.net, come svuotare ConcurrentDictionary?

concurrentdictionary dapper

Domanda

Sono nuovo di zecca e ho intenzione di usarlo sul mio nuovo progetto. Dopo averlo letto, sembra che l'unico problema che potrei avere è ConcurrentDictionary.

Dapper memorizza nella cache informazioni su ogni query eseguita, ciò gli consente di materializzare rapidamente gli oggetti e di elaborare rapidamente i parametri. L'implementazione corrente memorizza queste informazioni in un oggetto ConcurrentDictionary. Gli oggetti che memorizza non vengono mai scaricati. Se stai generando stringhe SQL al volo senza utilizzare i parametri, è possibile che si verifichino problemi di memoria. Possiamo convertire i dizionari in una cache LRU.

Come evito questo problema? Qualcuno può mostrarmi qualche codice per dirmi come e quando scaricarlo?

Risposta accettata

Per i commenti in alto, ecco un esempio di al volo:

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

Come puoi vedere, l'attuale SQL che verrà eseguito dapper sarà diverso in base al fatto che firstName e / o lastName siano nulli o no. Se entrambi sono nulli, si ottiene una stringa SQL. Se solo firstName non è nullo, ne ottieni un altro. Se solo lastName non è nullo, ne ottieni un altro. E infine, se entrambi non sono nulli si ottiene una quarta permutazione.

Questo è ciò che si intende per "al volo" - dapper cache si baserà su queste permutazioni uniche, e dato uno scenario più complesso, è facile vedere come finirai con una grande varietà di permutazioni, tutte di cui avrebbe bisogno di essere memorizzato nella cache in modo indipendente.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché