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

NHibernate Discussion :

NHibernate très lent


Sujet :

NHibernate

  1. #21
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Faut arrêter vos poncifs sur le sujet. moi j'ai fait des applis qui tiennent des To de données avec des ORM sans pb de perfs.

    Et j'ai aussi vu des bases de données horribles avec du SQL peu performant s'écrouler avec 4 GO de données.

    Faut arrêter de tout stigmatiser pour valoriser votre micro compétence.

    Le SQL et les bases ça ne fait pas tout bien et rapidement. Ca n'est pas souple, c'est difficile à maintenir, c'est chiant à tester (les recharges de base....).

    Et en plus c'est hors sujet et pénible.

    les ORM n'arrangent rien car ils sont nativement plus lents
    Ahhhhhhh oui!!!!! ADO.NET est plus lent qu'ADO.NET ????? Prendre des données et hydrater un objet avec serait plus long que simplement les prendre...Oh mais nous avons des mathématiciens pointus ici !!!!

    C'est certain que pour l'ORM, vous avez tous du voir qu'ils avaient des options, qu'on peut mettre des objets en lecture seule, utiliser un cache d'entités, continuer d'utiliser des vues indexées ou des procédures stockées !
    OUI ON PEUT !!!!!

    Sauf que vous ne faites aucun effort intellectuel. Le SQL, le SQL et encore le SQL....Mais qu'est ce que vous faites avec du SQL ?
    Parce que dans mon cas, passer le code dans du SQL c'est divisé mes perfs par 100,1000 voir 10000, quant ça passe. Parce que j'ai besoin d'un langage plus performant que le SQL.

    Si ça vous dépasse, c'est que probablement vous n'avez jamais dépassé l'ERP ou le site web. Bref, des insert massifs sans grande intelligence derriére autre que des barêmes de tva et des if partout.

    Moi je pense à des applis qui ont des logiques fonctionnelles très complexes et massives et qui travaillent dans une latence inférieure à la seconde. Alors faut arrêter vos sketchs de "nous on fait de vrais applications donc on sait mieux".

    Si vous arrivez à faire vos applis en SQL, c'est qu'elles sont triviales fonctionnellement.

    Juste une vraie comparaison :
    5000 options, une black & schole.
    En SQL, 25 minutes
    En C#, 30 secondes pour mettre toutes les entités en cache (no lock),1min 30 de calcul, 1 min d'insertion en ORM et la production est asynchrone.

    Code disponible pour les sceptiques, c'est du 1 pour 1. Et c aussi un des plus simpliste.

  2. #22
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    les 3 secondes restantes c'est surout du a IE (sur un page j'avais un treeview qui pouvait contenir plusieurs centaine d'éléments dans un noeud dès que je dépliai ce noeud j’attendais 30Sec sur IE sur firefox c'était instantanée)

  3. #23
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    B.A.F: je respect votre position, je ne pense pas être connu pour être un taliban SQL sur ce forum .NET...

    Oh mais nous avons des mathématiciens pointus ici !!!!
    Sauf que vous ne faites aucun effort intellectuel. Le SQL, le SQL et encore le SQL
    Et je ne pense pas avoir été agressif non plus... je trouve que votre POST l'est inutilement...

    Parce que dans mon cas, passer le code dans du SQL c'est divisé mes perfs par 100,1000 voir 10000, quant ça passe. Parce que j'ai besoin d'un langage plus performant que le SQL.
    Désolé mais cette phrase n'a aucun sens... si vous parlez d'un code qui fait un foreach avec envois d'un email alors oui ce n'est pas le travail du SGBD et c'est celui du code client...

    Qui a dit qu'il fallait faire toute l'appli en SQL?

    Personne ici... nous prônons juste de faire chaque partie avec les outils qui sont les plus performants pour le faire... en testant la solution retenue...

    En clair les données c'est en SQL, les interactions avec le client... c'est au code client...

    Pour moi faire de la présentation sur le SGBD ou traiter de la donnée en masse côté client c'est une erreur...


    ADO.NET est plus lent qu'ADO.NET !!!
    A? je croyais qu'on parlait de NH?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  4. #24
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par B.AF Voir le message
    Sauf que vous ne faites aucun effort intellectuel. Le SQL, le SQL et encore le SQL....Mais qu'est ce que vous faites avec du SQL ?
    Parce que dans mon cas, passer le code dans du SQL c'est divisé mes perfs par 100,1000 voir 10000, quant ça passe. Parce que j'ai besoin d'un langage plus performant que le SQL.
    Ce n'est que normal, tu préfères augmenter tes perfs aux détriments de celle de l'application que tu livres ! C'est une fuite en avant qui fini par vous rattraper.
    Citation Envoyé par B.AF Voir le message
    Juste une vraie comparaison :
    5000 options, une black & schole.
    En SQL, 25 minutes
    En C#, 30 secondes pour mettre toutes les entités en cache (no lock),1min 30 de calcul, 1 min d'insertion en ORM et la production est asynchrone.

    Code disponible pour les sceptiques, c'est du 1 pour 1. Et c aussi un des plus simpliste.
    Ah bon ! même sans voir la solution, je dirais que cela ne peut pas être possible, reste la façon dont vous traiter le sujet. Sinon, tu pourrais nous faire voir ton code.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #25
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    C'est certain que maximiser une vraissemblance et faire une variance conditionnelle, c'est probablement nous qui ne savons pas faire de SQL.
    Mais descendez deux secondes de votre piedestal !
    On a pas besoin du SQL systèmatiquement pour faire des applications fiable, d'envergure et performantes.

    Comment on fait des fonctions numériques en SQL ?
    Comment on fait de la programmation paralélle en SQL ?
    Comment on fait de la génération aléatoire en SQL ?
    Comment on fait du temps réel en SQL ? Des signaux ?
    Comment on gére le temps en SQL ?
    Comment on fait une monte carlo en SQL ?
    Et surtout si c'est faisable; comment le faire de façon performante (Vraiment) ??????

    Ah ok, SELECT Produit * Quantité * sp_trouvetva('FR', GETDATE(), 'REGIME INDEPENDANT') c'est certain que ça marche. Mais ça marche aussi en basic et dans Excel.

    Dans les applications qui ont besoin d'une latence faible voir très faible, le SQL est un boulet à trainer.

  6. #26
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Bon puisque vous ne changez pas de ton je vais m'y mettre:

    SELECT Produit * Quantité * sp_trouvetva('FR', GETDATE(), 'REGIME INDEPENDANT')
    C'est sûr que si vous codez tout comme ça vous n'êtes pas près de faire quelque chose de performant avec du SQL :-)


    Manifestement,le problème est que vous semblez mieux maîtriser .NET que SQL...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  7. #27
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Bon puisque vous ne changez pas de ton je vais m'y mettre:
    Ne tombe pas dans le piège de le vouloir le suivre un jour il comprendra.
    Citation Envoyé par B.AF Voir le message
    C'est certain que maximiser une vraissemblance et faire une variance conditionnelle, c'est probablement nous qui ne savons pas faire de SQL.
    Mais descendez deux secondes de votre piedestal !
    On a pas besoin du SQL systèmatiquement pour faire des applications fiable, d'envergure et performantes.

    Comment on fait des fonctions numériques en SQL ?
    Comment on fait de la programmation paralélle en SQL ?
    Comment on fait de la génération aléatoire en SQL ?
    Comment on fait du temps réel en SQL ? Des signaux ?
    Comment on gére le temps en SQL ?
    Comment on fait une monte carlo en SQL ?
    Et surtout si c'est faisable; comment le faire de façon performante (Vraiment) ??????

    Ah ok, SELECT Produit * Quantité * sp_trouvetva('FR', GETDATE(), 'REGIME INDEPENDANT') c'est certain que ça marche. Mais ça marche aussi en basic et dans Excel.

    Dans les applications qui ont besoin d'une latence faible voir très faible, le SQL est un boulet à trainer.
    Tu es vraiment têtu, chaque outils a son rôle, mais une fois de plus tu ne connais pas le SQL, c'est l'impression que tu donnes au vu de la liste que tu viens d'énumerer !

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Bonjour

    Woaw que de forces vives !

    Merci de vos réponses.

    Citation Envoyé par Nathanael Marchand Voir le message
    Et le plan d'execution de cette requete, il donne quoi?
    Insignifiant (cost = 3). Le champ est indexé.

    Citation Envoyé par WOLO Laurent Voir le message
    Et si la requête SQL n'était pas la cause ?
    Pouvez-vous nous donner le nombre de requête/s ?
    Chaque test = une requête. Il n'y a pas de requêtes supplémentaires.

    Citation Envoyé par B.AF Voir le message
    (...) il y a moyen de voir le code dans son intégralité ?
    C'est à dire tous les mappings avec toutes les associations et les configs ?
    Ca représente pas mal à mettre dans un petit post. Une indication particulière pour permettre de présenter tout ce code de manière lisible (à part la balise CODE) ?

    En ce qui concerne le débat pour ou contre. Dans mon cas c'est surtout une question de rapidité et facilité. Je n'avais clairement pas le temps de commencer à me plonger dans le développement d'un ORM. De plus je n'ai pas vraiment de bonne méthod de développement (design, pattern, etc.). Il me fallait une base sûr, solide et peut coupler qui me permettrait d'envisager des changements au niveau de mon application. Ca était long à prendre en main et mettre en place mais maintenant ajouter une entité et configurer les comportement est vraiment peu couteux en temps de développement.

    Merci pour votre aide à tous.

    Bien à vous

  9. #29
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Points : 24
    Points
    24
    Par défaut
    Oulaa il y a de l'animation je sens que je vais m'amuser sur ce forum

    Sinon pour discuter sur le sujet, est ce que tu ne pourrais pas faire un objet ISession statique?

    Et de ne plus utiliser le using pour chaque requête?

  10. #30
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Citation Envoyé par potocastel Voir le message
    Oulaa il y a de l'animation je sens que je vais m'amuser sur ce forum

    Sinon pour discuter sur le sujet, est ce que tu ne pourrais pas faire un objet ISession statique?

    Et de ne plus utiliser le using pour chaque requête?
    Non une session statique n'apporterait rien en perf, pire, c'est pas terrible d'avoir des sessions longues.
    Au contraire, son pattern uow est bon.

  11. #31
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Citation Envoyé par iberserk Voir le message

    Manifestement,le problème est que vous semblez mieux maîtriser .NET que SQL...
    Moi je pense qu'à trois, vous êtes juste enfermés dans votre micro compétence, que vous ne maitrisez ni le dev ni la conception logicielle et que vous venez faire un troll et un hors sujet dont tout le monde se passerait bien.

    Bon select, bon union, bon tout, et j'arrête là cette discussion est insignifiante avec des gens inintéressants.

  12. #32
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Citation Envoyé par diplomegalo Voir le message

    Ca représente pas mal à mettre dans un petit post. Une indication particulière pour permettre de présenter tout ce code de manière lisible (à part la balise CODE) ?


    Merci pour votre aide à tous.

    Bien à vous
    Laisse moi un message et je te donnerai un mail sur lequel l'envoyer.

  13. #33
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Moi je pense qu'à trois, vous êtes juste enfermés dans votre micro compétence, que vous ne maitrisez ni le dev ni la conception logicielle et que vous venez faire un troll et un hors sujet dont tout le monde se passerait bien.
    D'accord on est trois inconnus qui avons volé les identifiants de vrai gens
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  14. #34
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Nous trois, nous avons une micro-compétance ...,vous me faites rire mais bon, il vaut mieux rester humble.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  15. #35
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Bonjour

    Je vous annonce que je stoppe ce topic. Les performances ne sont pas super bonne mais acceptable pour l'environnement dans lequel je travail.

    Voilà pour les plus curieux d'entre vous des extraits de code :

    ** Une classe static qui me permet de gérer la configuration Fluent Nhibernate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public abstract class FNSettings
    La SessionFactory est créée une seule fois lors du premier appel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static ISessionFactory SessionFactory {
                get {
                    if (_sessionFactory == null)
                        _sessionFactory = FNSettings.CreateSessionFactory();
                    return _sessionFactory;
                }
            }
    Création d'une session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static ISession CreateSession() {
                return SessionFactory.OpenSession();
            }
    Configuration Fluent

    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
     
    private static FluentConfiguration FNConfiguration{
                get {
                    if (_fnConfiguration == null){
                        var cfg = OracleClientConfiguration.Oracle10
                            .ConnectionString(c => c.Is(FNSettings.ConnectionString))
                            .Dialect<NHibernate.Dialect.Oracle10gDialect>()
                            .ShowSql();
     
                        _fnConfiguration = Fluently.Configure()
                            .Database(cfg)
                            .ExposeConfiguration(
                                c => c.SetProperty("current_session_context_class", "web")) //use for HttpModule 
                            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ContactMap>())
                            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PersonMap>())
                            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ScreeningMap>());
                    }
                    return _fnConfiguration;
                }
            }
    ** Mapping de contact

    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
     
    public class ContactMap : ClassMap<Contact>
        {
            public ContactMap()
            {
                Table("CONTACT");
     
                Id(x => x.Id, "contactid");
                Map(x => x.Firstname, "firstname");
                Map(x => x.Lastname, "lastname");
                Map(x => x.Numcli);
                Map(x => x.Birthday);
     
                References<Screening>(x => x.Screening)
                    .Column("contactid");
     
                HasMany<Person>(x => x.Person)
                    .KeyColumn("contactid")
                    .Inverse();
            }
        }
    ** Une abstract classe Repository

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    internal abstract class Repository<T> : IRepository<T> where T : class {
    Un propriété Session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private ISession _session;
            protected ISession Session{
                get {
                    if (_session == null) { 
                        _session = FNSettings.CreateSession();
                        //_session = FNSettings.GetCurrentSession();
                    }
                    return _session;
                }
            }
    Get by id session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public T GetById(object id){
                if (id == null)
                    throw new ArgumentNullException("Id cannot be null");
                if (string.IsNullOrEmpty(id.ToString()))
                    throw new ArgumentException("Id cannot be null or empty");
                return (T) Session.Get<T>(id);
            }
    ** Une classe repository spécifique au contact qui hérite de la classe Repository

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    internal class ContactRepository : Repository<Contact>, IContactRepository{
    Criteria

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public Contact GetByEntityId(string idSlx) {
                if (string.IsNullOrEmpty(idSlx))
                    throw new ArgumentException("Id cannot be null or empty");
     
                ICriteria criteria = Session.CreateCriteria<Contact>();
                criteria.Add(Restrictions.Eq("Id", idSlx));
     
                try{
                    return criteria.List<Contact>()[0];
                }catch (IndexOutOfRangeException){
                    throw new ObjectNotFoundException(idSlx, typeof(Contact).Name) ;
                }
            }
    Donc j'ai une session par instance de repository qui reste "ouverte" durant toute la durée de vie du repository (utile au lazyload).

    Tout ça est très standard...

    Merci pour votre aide

    Bien à vous

  16. #36
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Bonjour

    Dernièrement j'ai également ajouté quantité d'index dans ma base de données. Cela m'a permis d'améliorer considérablement les temps de réponses et à donc solutionner définitivement mon problème.

    Merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. BDD sur réseau très très très lent...
    Par ericain dans le forum Access
    Réponses: 12
    Dernier message: 20/02/2015, 17h17
  2. Ouverture et fermeture de base très lent...
    Par Tofdelille dans le forum Installation
    Réponses: 6
    Dernier message: 19/09/2006, 18h51
  3. [Lomboz] Editeur jsp très lent
    Par lr dans le forum Eclipse Java
    Réponses: 10
    Dernier message: 29/01/2005, 19h43
  4. SQL Server trés lent
    Par arwen dans le forum MS SQL Server
    Réponses: 18
    Dernier message: 07/11/2003, 14h45

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