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

C# Discussion :

Conseil chargement des données


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Points : 191
    Points
    191
    Par défaut Conseil chargement des données
    Bonjour,

    Cela fait déjà un moment que je me pose cette question et j'aimerai vos conseil.

    J'ai dans mon projet un objet qui en contient un autre.

    Client
    |
    ---> Code postal

    Quand je charge mon client, qu'elle est la meilleur facon de procéder ?


    Je fait une requête jointure et je charge tout le client et le code postal d'un coup


    Ou fait un select uniquement sur le client.
    Puis je fais un "new" sur le code postal auquel j'envoie l'id du "Code postal" et je refais une requete dans ma classe "code postal" pour charger cet objet

    Qu'elle est la meilleur solution ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Bonjour,

    C'est contextuel.

    Si le code postal est régulièrement invoqué, alors vaudrait mieux le mettre en mémoire à l'instanciation de la classe composante.

    Si l'utilité du code postal est exceptionnelle, alors vaudrait mieux y aller avec du 'lazy loading', soit maison ou configuré si on utilise un ORM tel que nHibernate.

    Il faut aussi prendre en compte s'il y a des contraintes d'utilisation de la mémoire ou des disques. Si la mémoire est tellement pleine sur le serveur qu'il est obligé de spooler sur le disque, aussi bien faire du 'lazy loading'. Si par contre l'IO est très lent, vaudrait mieux tout mettre en mémoire dès le début.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Points : 191
    Points
    191
    Par défaut
    Bonjour,
    je n'utilise pas d'ORM.
    Il n'y a pas de problème d'utilisation de mémoire, je veux juste faire un code le plus propre possible.

    je vais essayer d'être plus clair car cette réponse ne m'aide pas
    Est ce que c'est mieux de faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
        public class Localite
        {
            int nIdLocalite;
            String sLocalite;
    		String sPays;
    	}
    	public class Client
    	{
    		int nIdClient;
    		String sNom;
    		Localite loc;
     
    		public void loadData()
    		{
    			sqltxt = "select dataClient,dataLocalite FROM Client JOINTURE SUR LOCALITE";
     
    			nIdClient = valeur;
    			sNom = valeur;
    			loc = new Localite;
     
    			loc.nIdLocalite = valeur;
    			loc.sLocalite = valeur;
    			loc.sPays = valeur;
    		}
    	}
    ou ca comme ca :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    	public class Localite
        {
            int nIdLocalite;
            String sLocalite;
    		String sPays;
     
    		public Localite(IDLocalite)
    		{
    			sqltxt = "select dataLocalite FROM Localite WHERE IDLocalite = " + IDocalite;
    			loc.nIdLocalite = valeur;
    			loc.sLocalite = valeur;
    			loc.sPays = valeur;
    		}
    	}
    	public class Client
    	{
    		int nIdClient;
    		String sNom;
    		Localite loc;
     
    		public void loadData()
    		{
    			sqltxt = "select dataClient,IDlocalite FROM Client";
     
    			nIdClient = valeur;
    			sNom = valeur;
    			loc = new Localite(IDlocalite);
     
    		}
    	}
    Sachant que client possède d'autres objets. Et que d'autres classes s'appellent aussi entres elles.

  4. #4
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    Que tu fasse une ou deux requêtes, c'est comme toujours en informatique, ça dépend. Si tu recrées à chaque fois ta connexion, il vaut mieux tout récupérer en une fois (le coût incompressible de la création de ta connexion ne joue pas en faveur des perfs). Si tu réutilises la connexion, ça n'a pas vraiment de différences transcendante.

    En terme de requête, une jointure est plus lente que deux requêtes si tu ne tapes pas sur les bon index ou clés primaires (en fonction de la cardinalité, si IDLocalité est nullable, la deuxième requête devient inutile). Au vu de ce qu'on peut imaginer, le modèle pour ces deux tables est somme tout assez classique, donc pas grande différence non plus.

    Bon dév.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Points : 191
    Points
    191
    Par défaut
    Bonjour,

    Merci sisqo60, ta réponse me satisfait entièrement.

    Merci !

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

Discussions similaires

  1. Conseil Chargement des données / Utilisation Viewstate
    Par 21.rems dans le forum Débuter
    Réponses: 1
    Dernier message: 20/05/2009, 17h36
  2. chargement des données d'un datawarehouse syntaxe oracle
    Par mehdiing dans le forum Administration
    Réponses: 3
    Dernier message: 01/05/2007, 11h23
  3. Processus de chargement des données (avec talend)
    Par szoubir dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 27/04/2007, 12h17
  4. Chargement des données d'une classe vers une autre
    Par nosdev dans le forum Access
    Réponses: 1
    Dernier message: 16/01/2007, 14h44
  5. Réponses: 2
    Dernier message: 20/11/2006, 14h35

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