Frage

Kann jemand bitte erklären, was dies bedeutet (von der Website von dapper.net)

Einschränkungen und Vorbehalte

Dapper reitet Informationen zu jeder Abfrage ab, die sie ausgeführt hat. Dadurch können Objekte schnell materialisiert und Parameter schnell verarbeitet werden. Die aktuelle Implementierung speichert diese Informationen in einem gleichzeitigen Objekt. Die Objekte, die es speichert, werden nie gespült. Wenn Sie SQL -Zeichenfolgen im laufenden Fliegen ohne Parameter generieren, werden Sie auf Speicherprobleme klicken. Wir können die Wörterbücher in einen LRU -Cache umwandeln.

Ich kann nicht verstehen, was die Linie in Fettdruck bedeutet. Ich verwende SQL Server und C# Client.

Kann jemand bitte ein Beispiel von C# Code geben, das dieses Speicherproblem erstellt. Danke

War es hilfreich?

Lösung

Wenn Sie SQL -Zeichenfolgen im laufenden Fliegen ohne Parameter generieren, werden Sie auf Speicherprobleme klicken.

Du kannst das:

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

Oder Sie können das tun:

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

Letzteres ist parametrisiert. Es wird einmal zwischengespeichert. Ersteres ist nicht parametrisiert. Es wird jedes Mal zwischengespeichert, wenn Sie eine Abfrage mit einem anderen Wert für einen anderen Wert schreiben email. Dadurch explodieren Sie Ihr Speicher.

Letzteres ist sehr überlegen. Es vermeidet Injektionsangriffe. Dapper kann es einmal zwischenspeichern. SQL Server kompiliert den Ausführungsplan einmal und zwischenspeichert ihn.

Sie sollten (imperativ) bereits parametrisierte Abfragen verwenden. Wenn Sie nicht sind, lassen Sie alles, was Sie tun, fallen und machen Sie dies zu einer unmittelbaren Priorität.

Kann jemand bitte ein Beispiel von C# Code geben, das dieses Speicherproblem erstellt. Danke

Mach das erstere in einer Schleife. Beobachten Sie, wie Ihr Gedächtnis wächst. Letztere in einer Schleife machen. Beobachten Sie, wie Ihr Gedächtnis nicht wächst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top