Domanda

Qualcuno può spiegare che cosa questo significa (dal sito Dapper.net)

Limitazioni e avvertenze

Dapper memorizza informazioni su ogni query viene eseguito, questo permettono di materializzare gli oggetti in modo rapido e parametri di processo rapidamente. L'implementazione corrente memorizza queste informazioni in un oggetto ConcurrentDictionary. Gli oggetti che i negozi sono mai lavati. Se si sta generando stringhe SQL al volo senza l'utilizzo di parametri è possibile vi ha colpito problemi di memoria. Possiamo convertire i dizionari in un LRU cache.

Io non sono in grado di capire ciò che la linea in grassetto mezzi. Sto usando client di SQL Server e C #.

Qualcuno può dare un esempio di codice C # che consente di creare questo problema di memoria. grazie

È stato utile?

Soluzione

Se si sta generando stringhe SQL al volo senza l'utilizzo di parametri è possibile vi ha colpito problemi di memoria.

Si può fare questo:

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

o si può fare questo:

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

Il secondo è parametrizzato. Esso verrà memorizzata nella cache una volta. Il primo non è parametrizzato. Sarà memorizzato nella cache ogni volta che si scrive una query come con un valore diverso per email. Questo esploderà la tua memoria.

Il secondo è di gran lunga superiore. Evita attacchi di iniezione. Dapper può memorizzare nella cache una volta. SQL Server verrà compilato il piano di esecuzione, una volta e la cache di esso.

Si dovrebbe (imperativo) già prevede di utilizzare query con parametri. Se non sei, mollare tutto si sta facendo e rendere questa una priorità immediata.

Qualcuno può dare un esempio di codice C # che consente di creare questo problema di memoria. grazie

Basta fare il primo in un ciclo. Guarda il tuo crescere di memoria. Fare quest'ultima in un ciclo. Guarda la memoria non cresce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top