Question

Je suis nouveau dans SubSonic et Linq Stuff et j’essaie de trouver le moyen le plus rapide et optimal de récupérer un seul enregistrement.

Quelle autre méthode est plus rapide et nécessite moins de code pour écrire que pour obtenir un seul enregistrement?

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

J'ai l'habitude de vérifier avec l'outil AntsProfiler, ce qui prend en moyenne 29.12ms de temps CPU - testé sur dix exécutions

Où cela prend encore plus de temps

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

La dernière ligne prend 256.08ms de temps processeur et UserController prend 66.86ms.

Des suggestions?

Était-ce utile?

La solution

IIRC, l’objet de requête parle couramment .. c’est-à-dire

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

Doit se lire comme suit:

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

C’est peut-être à cause de la durée accrue de vos tests (vous demandez tous les éléments de l’utilisateur, puis vous saisissez le premier).

Autres conseils

Le "goulot d'étranglement" serait la requête générée en cours d’exécution, pas SubSonic la générant ou renvoyant le résultat. Si une requête est lente, vous devez l’optimiser à l’aide des fonctions d’indexation de votre fournisseur de base de données.

Dans le deuxième cas, je suppose que le temps d'exécution supplémentaire est un temps système pour que LINQ renvoie le premier élément de la collection.

Donc, ma réponse serait, le premier moyen est le meilleur moyen de le faire, et si 29 ms n'est pas acceptable (ce qui pour un appel à une base de données, je ne pense pas que ce soit déraisonnable), ajoutez quelques index dans votre DB pour accélérer la récupération.

Je pense que John a raison sur l’argent. Si vous voulez vraiment tester SubSonic pour voir combien de temps cela prend, il vous faudra tester combien de temps il a fallu à Subsonic pour créer l'instruction SQL et non pas combien de temps cela a pris pour créer l'instruction SQL et combien de temps il a fallu à votre base de données pour renvoyer les résultats en même temps (vous devez isoler vos tests).

Peut-être devriez-vous tester le temps nécessaire pour obtenir les résultats avec une ancienne commande SQLC régulière, lui transmettre votre connexion et vos paramètres et voir combien de temps cela prend pour que vous puissiez effectuer une comparaison.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top