Frage

Ich bin neu in SubSonic und Linq Stuff und ich bin eine Figur aus der kürzesten und optimalen Art und Weise einen einzelnen Datensatz des Abrufens versuchen.

Welche andere Art und Weise ist schneller und erfordert weniger Code als dies zu schreiben einen einzelnen Datensatz zu bekommen?

User user2 = DB.Select().From(User.Schema)
.Where(User.PasswordColumn).IsEqualTo(password)
.And(User.SINumberColumn).IsEqualTo(siNumber)
.ExecuteSingle<User>();

Ich habe AntsProfiler Werkzeug benutzt, um zu überprüfen, und dies dauert avg von 29.12ms CPU-Zeit - getestet über zehn Läufe

Wo, wie dies dauert noch länger

UserController uc = new UserController();
Query query = new Query("User");
query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);   
User user = uc.FetchByQuery(query).First<User>();

Nur die letzte Zeile nehmen 256.08ms CPU-Zeit plus Usercontroller nimmt 66.86ms.

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

IIRC, das Query-Objekt ist fließend .. d.

query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);

Soll heißen wie:

query = query.WHERE(User.Columns.Password, password);
query = query.WHERE(User.Columns.SINumber, siNumber);

Die erhöhte Zeit in Ihren Tests machen dies wegen werden kann (Sie für alle Benutzereinträge zu fragen und dann die erste Rupfen).

Andere Tipps

Der „Engpass“ wäre die erzeugte Abfrage ausgeführt wird, nicht SubSonic Erzeugen sie oder das Ergebnis zurück. Wenn eine bestimmte Abfrage langsam ist, sollten Sie Ihren Datenbank-Anbieter Indexierungsfunktionen suchen in Verwendung zu optimieren.

Im zweiten Fall gehe ich davon aus, die zusätzliche Ausführungszeit-Overhead für LINQ das erste Element aus der Sammlung zurück.

Also meine Antwort wäre, der erste Weg ist der beste Weg, es zu tun, und wenn 29ms nicht akzeptabel ist (was für einen Anruf an eine DB, ich glaube nicht unvernünftig ist), fügen Sie einige Indizes in Ihrem DB zu beschleunigen Abruf.

Ich denke, dass John auf das Geld stimmt. Wenn Sie wirklich SubSonic wollen testen, um zu sehen, wie viel Zeit es braucht, müssen Sie testen, wie lange es dauert Unterschall die SQL-Anweisung nicht, wie lange zu schaffen es die SQL-Anweisung zu erstellen und wie lange SubSonic dauert es Ihre DB nimmt die Ergebnisse zurück zur gleichen Zeit (Sie müssen Ihre Tests isolieren).

Vielleicht sollten Sie testen, wie lange es die Ergebnisse mit einem regulären alten SQLCommand zu bekommen nimmt und gibt sie Ihre Verbindung und Parameter und sehen, wie lange das so nimmt, dass Sie einen Vergleich haben.

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