IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Bonne pratique : mapper le résultat d'une requête avec un objet


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Points : 36
    Points
    36
    Par défaut Bonne pratique : mapper le résultat d'une requête avec un objet
    Bonjour à tous,

    j'aurais voulu savoir la façon la plus performante de valoriser un objet métier à partir du résultat d'une requête (datatable).

    J'ai par exemple un objet User avec les propriétés Nom et Prenom. Je voudrais remplir une List<User> (ou dico) à partir du résultat de ma requête sans faire un foreach sur les Rows de ma DataTable.

    Merci pour votre aide !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Des bonnes pratiques, je ne sais pas vraiment, mais en tous cas, éviter le for each je ne vois (à moins qu'en jouant sur les mots, tu acceptes le for int) !

    Personnellement, je créé une fonction "mapper" par type d'objet à mapper et j'ai une méthode générique qui à partir d'un DataReader ou une DataTable bouclant sur chaque Row appelle la méthode "mapper" créant chaque occurrence d'objet (en mappant tous les champs) !

    Je ne sais si c'est la meilleure façon, mais elle est plutôt générique je trouve !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Ok en fait je me demandais s'il n'y avait pas de méthode plus performante.
    C'est comme cela que je fais aussi mais je trouvais cela un peu lourd.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Lourd en code ? ou lourd en perf ?

    En code, la méthode générique doit tenir en 10 lignes voir 20.
    Les fonctions mapper autant de lignes que de champs !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Non lourd en Perfs !
    Si tu regardes ma question de base :

    j'aurais voulu savoir la façon la plus performante
    Maintenant s'il n'y a pas d'autre façon de faire...

    Merci de ta réponse en tout cas !

  6. #6
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Ok, enfin tu sais des fois la plus performante ne prend pas le sens que tu utilises là.

    As-tu déjà essayé de ne pas utiliser une datatable mais directement un datareader ?

    Sinon tu sembles dire que c'est lent, peut-on avoir une idée de la volumétrie ?
    Comment effectues-tu le mappage de la datatable et ton objet (exemple de code) ?
    As-tu réalisé des relevés de perfs pour identifier les éventuels goulots d'étranglement ?

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    Citation Envoyé par ThistleDub Voir le message
    j'aurais voulu savoir la façon la plus performante de valoriser un objet métier à partir du résultat d'une requête (datatable).

    J'ai par exemple un objet User avec les propriétés Nom et Prenom. Je voudrais remplir une List<User> (ou dico) à partir du résultat de ma requête sans faire un foreach sur les Rows de ma DataTable.
    Dans ce cas, je ne comprends pas pourquoi tu veux passer par une DataTable. En effet, si l'objectif est d'être le plus performant possible, le plus silmple c'est de passer directement du reader à la List; on ne voit pas bien l'interêt ici de passer par l'étape DataTable.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    As-tu déjà essayé de ne pas utiliser une datatable mais directement un datareader ?
    on ne voit pas bien l'interêt ici de passer par l'étape DataTable.
    Oui biensûr, l'intitulé de ma question ne reflète effectivement pas ce que je fais effectivement dans mon code sur ce point là, car je passe par un reader.
    Effectivement aucun intérêt.

    Sinon tu sembles dire que c'est lent, peut-on avoir une idée de la volumétrie ?
    Pour le moment en base Test, je n'ai que 3600 lignes dans ma table, donc le traitement prend moins d'une seconde. Mais à terme, avec 200 000 ou 300 000 lignes je demande à voir.
    Il faut que je fasse des tests dans ce sens.

    As-tu réalisé des relevés de perfs pour identifier les éventuels goulots d'étranglement ?
    Non j'avoue que je ne suis pas allé jusque là autrement qu'en mettant des traces horodatées.
    Si des outils sont performants dans ce domaine, je suis preneur !

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par ThistleDub Voir le message
    Si des outils sont performants dans ce domaine, je suis preneur !
    Déjà mesurer le temps d'exécution de la requête sur la base elle même. Si ta base c'estdu Sql Server, tu as le profiler qui fait cela très bien.

    A partir de cette base, il est possible de discuter optim du code; mais si déjà ta requêt est trop longue car index mal tunés, etc .... il faut commencer par là (Dans Sql Server tu as par exemple la possibilité de créer des champs non clefs dans les index, possibilité largement sous exploitée dans le cas de requêtes fréquentes)

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Oui effectivement nous passons toutes les requêtes au profiler.
    Et bien merci pour tous ces éclaircissements.
    Je clôture !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/06/2007, 01h13
  2. Réponses: 1
    Dernier message: 17/06/2007, 10h10
  3. Réponses: 3
    Dernier message: 04/05/2007, 09h08
  4. Afficher le résultat d'une requête avec des côtes
    Par sweet_hell dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/10/2006, 10h32
  5. Pb résultats d'une requête avec ou sans Recordset
    Par fredeau dans le forum Access
    Réponses: 3
    Dernier message: 24/04/2006, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo