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

Visual C++ Discussion :

Probl�me de rapidit� d'ex�cution VC++6.0/VS2008


Sujet :

Visual C++

  1. #1
    Membre �prouv� Avatar de Thrud
    Profil pro
    D�veloppeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par d�faut Probl�me de rapidit� d'ex�cution VC++6.0/VS2008
    Bonjour,

    j'ai des probl�mes de performance sur une application. Elle avait �t� d�velopp�e sous VC++6.0, et elle a �t� port�e sous VS2008.
    Apr�s quelques tests, j'arrive � la conclusion que le code produit par VS2008 est bien plus lent que celui produit par VC++6.0 !
    Le probl�me concerne des actions sur une std::map.
    J'ai refait un petit programme d'exmple pour bien isoler le probl�me.

    J'ai une classe qui contient un membre de type std::map<>, dans lequel j'ins�re des attributs. Je commence par faire une recherche pour v�rifier si l'attribut existe, j'alloue le nouvel attribut, et je l'ins�re dans la map.
    La classe Attribute ne fait rien, et le programme principal se contente d'instancier un BusinessObj, et d'appeler la methode FillAttributes().

    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
     
     
    void BusinessObj::FillAttributes()
    {
        AddAttribute( "Attribute1" );
        AddAttribute( "Attribute2" );
        AddAttribute( "Attribute3" );
        AddAttribute( "Attribute4" );
        AddAttribute( "Attribute5" );
    }
     
    void BusinessObj::AddAttribute( char* Attrib_name )
    {
        map < char * , Attribute *,ltstr1>::iterator itor; 
        LARGE_INTEGER liStart;
        LARGE_INTEGER liFrequency;
        LARGE_INTEGER liFind;
        LARGE_INTEGER liAlloc;
        LARGE_INTEGER liInsert;
     
        ::QueryPerformanceFrequency( &liFrequency );
        ::QueryPerformanceCounter( &liStart );
     
        itor = Attributes.find((char *) Attrib_name); 
        ::QueryPerformanceCounter( &liFind );
     
        if (itor==Attributes.end())
        {
     
            Attribute* pNewAttribute = new Attribute(); 
            ::QueryPerformanceCounter( &liAlloc );
            Attributes[(char *) strdup(Attrib_name)] = pNewAttribute;
            ::QueryPerformanceCounter( &liInsert );
        }
     
        char chBuffer[400];
        sprintf(chBuffer, "CBusinessObj::InsertAttribute : Find : %f s -- Alloc : %f s -- Insert : %f s \n", 
            (liFind.QuadPart - liStart.QuadPart) * 1.0 / liFrequency.QuadPart,
            (liAlloc.QuadPart - liFind.QuadPart) * 1.0 / liFrequency.QuadPart,
            (liInsert.QuadPart - liAlloc.QuadPart) * 1.0 / liFrequency.QuadPart
            );
        ::OutputDebugString( chBuffer );
    }
    sous VC++6.0, �a me donne les temps suivants.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    CBusinessObj::InsertAttribute : Find : 0.000002 s -- Alloc : 0.000003 s -- Insert : 0.000016 s 
    CBusinessObj::InsertAttribute : Find : 0.000001 s -- Alloc : 0.000003 s -- Insert : 0.000005 s 
    CBusinessObj::InsertAttribute : Find : 0.000001 s -- Alloc : 0.000002 s -- Insert : 0.000005 s 
    CBusinessObj::InsertAttribute : Find : 0.000001 s -- Alloc : 0.000002 s -- Insert : 0.000004 s 
    CBusinessObj::InsertAttribute : Find : 0.000002 s -- Alloc : 0.000004 s -- Insert : 0.000009 s

    et le m�me projet port� sous VS2008 me donne les temps suivants :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    CBusinessObj::InsertAttribute : Find : 0.000011 s -- Alloc : 0.000005 s -- Insert : 0.000014 s 
    CBusinessObj::InsertAttribute : Find : 0.000009 s -- Alloc : 0.000008 s -- Insert : 0.000018 s 
    CBusinessObj::InsertAttribute : Find : 0.000008 s -- Alloc : 0.000007 s -- Insert : 0.000019 s 
    CBusinessObj::InsertAttribute : Find : 0.000009 s -- Alloc : 0.000006 s -- Insert : 0.000018 s 
    CBusinessObj::InsertAttribute : Find : 0.000009 s -- Alloc : 0.000006 s -- Insert : 0.000019 s
    la question est : mais pourquoi ??
    Comment expliquer le facteur 5 pour le find, et le facteur 3 pour l'insert dans la map ??
    Comment retrouver des valeurs identiques � celles de VC++6.0 avec VS2008 ?

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par d�faut
    Essaie en activant le "Link time code generation" (onglet �dition de liens, rubrique Optimisations) pour voir si �a corrige ou pas ton probl�me...

    V�rifie �galement que tu as bien un projet VS2008 "propre", qui n'h�rites pas de la feuille de style "Compatibilit� VC6" (onglet G�n�ral) : les projets import�s depuis les DSP/DSW VC6 sont, au mieux, moyens.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Salut,
    Si c'est possible (et souhaitable) il faut aussi d�sactiver _SECURE_SCL (et _HAS_ITERATOR_DEBUGGING ?) car ce sont des ajouts de MS ajoutant des contr�les qui peuvent consommer du temps.

  4. #4
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    v�rifie aussi les options d'optimisation dans l'onglet C++ (/O2 /Ox )
    et l'option /ot : privil�gier la vitesse � la taille.
    et je confirme il y a bug sur la conversion de projet vc6 en vc2008 qui peut donner des r�sultats catastrophiques en terme de perfs...

    farscape en direct des techdays sur le stand de dvp !

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par d�faut
    Citation Envoy� par farscape Voir le message
    et je confirme il y a bug sur la conversion de projet vc6 en vc2008 qui peut donner des r�sultats catastrophiques en terme de perfs...
    Ah, t'as remarqu� toi aussi, hein...

    Pour ma part, j'ai refais des projets "propres" VS2008, en ayant simultan�ment VS2008 et VC6 ouverts simultan�ment. Je m'en suis servi � 99% pour copier/coller les chemins d'inclusion et les listes de librairies uniquement.

    C'est plus long, mais c'est moins long que de nettoyer le projet converti, je trouve, et surtout c'est nettement plus fiable.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. [Hibernate][Oracle] Probl�me de rapidit�
    Par Saloucious dans le forum Hibernate
    R�ponses: 7
    Dernier message: 27/11/2008, 11h00
  2. Probl�me de rapidit� d'ex�cution ou compilation
    Par HASSIOMAR dans le forum Langage
    R�ponses: 2
    Dernier message: 17/07/2008, 13h13
  3. R�ponses: 4
    Dernier message: 13/04/2006, 08h57
  4. [Syst�me] rapidit� d'ex�cution if <> switch
    Par lalouve dans le forum Langage
    R�ponses: 12
    Dernier message: 10/02/2006, 22h52
  5. Probl�me lors de l'ex�cution de mes programmes
    Par darkmalak01 dans le forum Langage
    R�ponses: 7
    Dernier message: 27/09/2005, 18h35

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