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

Linq Discussion :

Performance insert avec requete sur fichier xml


Sujet :

Linq

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut Performance insert avec requete sur fichier xml
    Bonjour à tous,

    j'ai un petit soucis de performance il que je fasse une requête sur un fichier XML et après avec un foreach je l'insère dans ma table le problème c'est que j'ai plus de 140000 élément donc c'est très long .

    Voici mon code :

    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
     
    XDocument docXML = null;
     
                    try
                    {
                        docXML = XDocument.Load("monfichier.xml");
     
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("Erreur :  \n" + e.Message);
                    }
     
    var reqElementXML = from variables in docXML.Elements("VAR")
                                            where variables.Parent.Parent.Attribute("NAME").Value.StartsWith("SIMU")
                                            select new
                                            {
                                                nom = variables.Attribute("ONAME"),
                                                type = variables.Attribute("TYPE"),
                                                commentaire = (variables.Attribute("COMMENT") != null) ? variables.Attribute("COMMENT") : null,
                                                chemin = variables.Parent.Parent.Attribute("NAME").Value.Split(new char[]{'/'})[1]
                                            };
     
     
                       foreach (var element in reqElementXML)
                        {
                            this.cB_VarsTableAdapter.Insert(idChoisi, element.chemin, element.nom, element.type, element.commentaire);
                        }
    Voilà pour ceux qui pourrait m'aider à améliorer la rapidité, je vous remercie d'avance.

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Qu'est-ce qui est lent ?
    • L'insertion elle même en base (à vérifier avec SQL Profiler) ?
    • Le coût réseau entre ton serveur applicatif et ta base de donnée (à vérifier avec WireShark par exemple) ?
    • L'exécution du code (de simples logs peuvent suffire à vérifier) ?
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Je pense que c'est mon code, parce que la base de données et en local avec sqlCompact. Et Merci pour ta réponse.

  4. #4
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Tu peux le vérifier par exemple en utilisation la classe Stopwatch.

    Je ne vois rien de particulier dans ton code qui justifie de la lenteur, mais ça aiderait d'avoir des valeurs numériques en face.
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Heu, je veux bien faire le test avec StopWatch mais juste à titre indicatif ce matin j'ai mis plus de 20min et le traitement n'était toujours pas finis. J'ai plus de 140 000 données insérées dans ma table .

    Revoici mon code j'ai remarqué que je m'étais trompé :

    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
     
    var reqElementXML = from variables in docXML.Descendants(espaceNom + "VAR")
                                            where variables.Parent.Parent.Attribute("NAME").Value.StartsWith("SIMU")
                                            select new
                                            {
                                                nom = variables.Attribute("ONAME").Value,
                                                type = variables.Attribute("TYPE").Value,
                                                commentaire = (variables.Attribute("COMMENT") != null) ? variables.Attribute("COMMENT").Value : "",
                                                chemin = variables.Parent.Parent.Attribute("NAME").Value.Split(new char[]{'/'})[1]
                                            };
     
     
                       foreach (var element in reqElementXML)
                        {
                            this.Invoke(new tableCB_Vars(insertionTableCB_Vars), idChoisi, element.chemin, element.nom, element.type, element.commentaire);
                        }
    Ah oui aussi j'ai oublié de préciser que j'utilise des thread pour que mon application ne bloque pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.Invoke(new tableCB_Vars(insertionTableCB_Vars), idChoisi, element.chemin, element.nom, element.type, element.commentaire);
    correspond à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void insertionTableCB_Vars(long id, string chemin, string nickname, string type, string commentaire)
            {
                this.cB_VarsTableAdapter.Insert(id, chemin, nickname, type, commentaire);
     
            }

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Cet après midi j'ai fait des recherches d'ou peut venir cette latence, puis il y avait des forums qui parlaient sur les datatset et datatable, mais je crois pas que c'est possible de le faire avec mon code, sinon est-ce que quelqu'un aurait une idée de faire différemment et plus rapidement parce que là ça fait plus 30min que j'ai lancé mon programme et toujours pas fini.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Points : 75
    Points
    75
    Par défaut exemple de ton fichier xml
    salut,
    svp montre nous un exemple de ton fichier xml.
    merci en avance

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Oula, 150 000 éléments dans un SQL CE ? Ca commence à faire beaucoup non?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Voici un exemple du fichier XML :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <CONFIGURATION NAME="cp_laborame" DEVICES_NUMBER="15">
    	<SIGNATURES>
    		<TABLE_FILE  NAME="listEvent" SIGN_CRC="1264750801" />
    		<TABLE_FILE  NAME="listContext" SIGN_CRC="3925712456" />
    	</SIGNATURES>
    	<PROPERTIES>
    		<BOOL>
    			<PM NAME="is_a_context_variable" ID="P1" TYPE="BOOL" VALUE="false" />
    			<PM NAME="event_action51" ID="P100" TYPE="BOOL" VALUE="false" />
    			<PM NAME="event_action52" ID="P101" TYPE="BOOL" VALUE="false" />
    			<PM NAME="event_action53" ID="P102" TYPE="BOOL" VALUE="false" />
    			</BOOL>
    		<INT>
    			<PM NAME="context_var_description" ID="P10" TYPE="VOID" />
    			<PM NAME="context_var_array_size" ID="P11" TYPE="VOID" />
    		</INT>
    		<REAL>
    			<PM NAME="is_a_recorded_var" ID="P124" TYPE="BOOL" VALUE="false" />
    			<PM NAME="record_method" ID="P125" TYPE="STRING" />
    		</REAL>
    		<CHAR>
    			<PM NAME="is_a_redund_var" ID="P126" TYPE="BOOL" VALUE="false" />
    			<PM NAME="is_a_recorded_var" ID="P127" TYPE="BOOL" VALUE="false" />
    		</CHAR>
    	</PROPERTIES>
    	<NICKNAMES>
    		<NICKNAME VALUE="Idf_ITopoCeva7" ID="N8879" />
    		<NICKNAME VALUE="Li_IVe1Bogie1BrkIsold" ID="N359" />
    		<NICKNAME VALUE="Li_IVe2Bogie8BrkIsold" ID="N367" />
    	</NICKNAMES>
    	<DEVICES>
    		<DEVICE NAME="MPU_E1_sil0" UUID="d97e3e91-121d-4b1d-b6b1-85df04645be6" TASKS_NUMBER="1">
    			<TASKS>
    				<TASK NAME="t_sil0" UUID="1069e276-5de6-49d4-86bf-272e3d1e35ad" CYCLE_TIME="100" RUUID="ed506861-56b3-4669-9292-0144defc6ed8" INSTS_NUMBER="105">
    					<INST NAME="SIMU_E1_sil0/MPU_E1_sil0_t_sil0/" UUID="ed506861-56b3-4669-9292-0144defc6ed8" MODEL="MPU_E1_sil0_t_sil0" TYPE="mo">
    						<INS>
    							<VAR ONAME="Li_IVc2FanETFCCFastSpd_0" TYPE="BOOL" UUID="7ad49cb4-211b-4b4b-8876-2de2288f3ba6" NID="N1" VALUE="false" ID="V3652">
    								<LINKS>
    									<LINK VID="V462732" />
    								</LINKS>
    							</VAR>
    							<VAR ONAME="Li_IVc2FanETFCCSlowSpd_0" TYPE="BOOL" UUID="1615fcdb-abb1-4c99-9720-1dba3b24cf96" NID="N2" VALUE="false" ID="V3653">
    								<LINKS>
    									<LINK VID="V462733" />
    								</LINKS>
    							</VAR>
    						</INS>
    						<OUTS>
    							<VAR ONAME="BT_IN_s" TYPE="REAL" UUID="6d98c54a-4aab-4aab-a5bf-0bc4d88fec47" VALUE="-3.0" ID="V270741">
    							</VAR>
    							<VAR ONAME="BT_OUT1_s" TYPE="REAL" UUID="66a49488-f7f6-48de-a649-e457045a6678" VALUE="-3.0" ID="V270743">
    							</VAR>
    							<VAR ONAME="BT_OUT2_s" TYPE="REAL" UUID="f07d32f8-a0a0-4f9c-8d5a-5b71e314aa3c" VALUE="-3.0" ID="V270745">
    							</VAR>
    							<VAR ONAME="BT_OUT3_s" TYPE="REAL" UUID="7184e9a3-e40a-4159-8085-88039425641a" VALUE="-3.0" ID="V270747">
    							</VAR>
    							<VAR ONAME="BT_OUT4_s" TYPE="REAL" UUID="6a730874-830e-471d-8ca2-9e9c3d864579" VALUE="-3.0" ID="V270749">
    							</VAR>
    							<VAR ONAME="BT_OUT5_s" TYPE="REAL" UUID="b5499c26-9e6a-44dc-ab5f-13ab926aa6d3" VALUE="-3.0" ID="V270751">
    							</VAR>
    							<VAR ONAME="BT_OUT6_s" TYPE="REAL" UUID="e2ff5cf9-49f9-4d7d-9d10-b008221edebd" VALUE="-3.0" ID="V270753">
    							</VAR>
    							<VAR ONAME="BT_OUT7_s" TYPE="REAL" UUID="55d45eef-39eb-4583-a7ff-4d8845112c84" VALUE="-3.0" ID="V270755">
    							</VAR>
    							<VAR ONAME="BT_OUT8_s" TYPE="REAL" UUID="13a8992c-91f7-449a-b177-d908caa43d31" VALUE="-3.0" ID="V270757">
    							</VAR>
    						</OUTS>
    					</INST>
    				</TASK>
    			</TASKS>
    		</DEVICE>
    	</DEVICES>
    </CONFIGURATION>
    Et merci pour votre aide

  10. #10
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Oula, 150 000 éléments dans un SQL CE ? Ca commence à faire beaucoup non?
    Cela dépend de sa structure en base et du volume que chaque enregistrement, mais oui ça peut, c'est pour ça que j'aurai aimé vérifier le temps que prend une requête d'insertion. Le problème c'est que le SQL Profiler n'est pas (de mémoire) compatible avec SQL CE... ce serait en tout cas plus probable qu'une lenteur dans le code.
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Salut, j'ai fait le StopWatch sur une requête insert résultat : 00:00:00.02, donc rapide n'est ce pas ? Et aussi StopWatch sur la requête linq résultat : 00:00:00.00. A mon avis c'est le foreach qui prend du temps .

  12. #12
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Ça veut dire 2 secondes ou 20 millisecondes ?

    2 secondes c'est très long, 20 millisecondes c'est peu donc c'est bien (et c'est que ta base est sur la même machine).

    Ou alors tu as mesuré le select ?
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Le format c'était heure:min:seconde.millisecondes, donc c'est des millisecondes.

  14. #14
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Et si tu n'utilises pas de thread?
    Car le souci vient peut-être de là...

    Tu as essayé d'utiliser un BackgroundWorker ?
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Je suis entrain de le faire sans Thread et ça met toujours autant de temps, je suis déjà à 15min d'attente . Sinon il n y aurait pas un autre moyen de le faire qui donne le même résultat ?

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Voici le temps du StopWatch entre le foreach : 00:51:17.87 pour 147 178 élément, de plus l'affichage des données se fait instantanément. Héhé c'est long .

  17. #17
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Essaye de remplacer le foreach par un for, le gain est minimal (Quelques %) mais sur 50 minutes ça te fera peut être gagner 2 ou 3
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Heu c'est pareil avec le for , merci quand même.

  19. #19
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Au fait, où est ce que tu as mis ta stop watch ? Autour du invoke où de l'insert ?

    C'est peut être l'appel à Invoke qui prend du temps.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Je l'ai autour du insert. Mais j'ai exécute mon application sans Invoke et le résultat est le même. Moi j'ai une idéé mais je ne sais pas comment la mettre en oeuvre, je pensais si on sauvegardai ma requête dans un fichier XML temporaire et qu'on le lit avec un datatset.ReadXML(tempoXML) et après qu'on fait maGridView.DataSource = à mon dataset du fichier XML. Est-ce que mon idée marcherais, si oui comment on fait, parce que je ne vois pas.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Requête sur fichier XML avec liaison de données
    Par lpyann dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 14/08/2014, 21h44
  2. Traitement basique sur fichier xml avec python
    Par raphael75015 dans le forum Général Python
    Réponses: 11
    Dernier message: 22/05/2014, 15h44
  3. Réponses: 4
    Dernier message: 27/02/2010, 22h04
  4. Réponses: 1
    Dernier message: 07/09/2009, 07h15
  5. Insert avec select sur table avec Trigger d'insertion
    Par bran_noz dans le forum Développement
    Réponses: 5
    Dernier message: 23/12/2005, 14h38

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