Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Futur Membre du Club
    Homme Profil pro Sid Ahmed TOUBAL
    Ingénieur développement logiciels
    Inscrit en
    juillet 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Nom : Homme Sid Ahmed TOUBAL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2010
    Messages : 56
    Points : 19
    Points
    19

    Par défaut pérformances de odbc_fetch_row

    salut,
    j'utilise un scripte php comme Webservice pour accéder à SQLSERVER à partir de Silverlight ça marche très bien sauf que ça prend beaucoup de temps pour me renvoyer un résultat (5 a 8 secondes pour retourner 10 000 lignes)
    ce qui est largement loin de 1 seconde avec un Service WCF sur la même BDD et le même serveur
    du coup je me demande si le problème viens de mon scripte ou c'est vraiment un problème de performance de odbc_fetch_row
    voici mon scripte :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    include 'sqlserver_vars.php';
    $Requete = $_GET['Requete'];
    if($Requete != NULL and $Requete != "")
    {
        $connection = odbc_connect("Driver={SQL Server};Server=$server;Database=$db",$dbUsername,$dbPassword) ;
        $Resultat= odbc_exec($connection, $Requete);
        $NbrChamps = odbc_num_fields($Resultat);                
        $data = array();    
        while($itemRow = odbc_fetch_row($Resultat))
        {        
            $lig = array();    
            for($i=1;$i<=$NbrChamps;$i++)
            {
                $val = utf8_encode(odbc_result($Resultat,$i ));
                array_push($lig,$val);
            }    
            array_push($data,$lig);
        }
        echo json_encode($data);
        odbc_close($connection);
    }

  2. #2
    Membre actif
    Homme Profil pro Glen Rhodes
    Étudiant
    Inscrit en
    novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Nom : Homme Glen Rhodes
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2009
    Messages : 141
    Points : 181
    Points
    181

    Par défaut

    Bonjour,

    Je n'ai pas d'infos sur les performances d'odbc en php mais je peux par contre proposer une petite astuce pour optimiser le code présenté. Ce code utilise array_push pour rajouter à la fin des tableaux $lig et $data. Dans la doc officielle ils conseillent d'utiliser la forme équivalente:
    afin d'éviter d'appeler inutilement une fonction.
    Je ne sais pas quel impact cela aura sur le temps d’exécution du script mais c'est peut-être une piste.

  3. #3
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 125
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 125
    Points : 7 254
    Points
    7 254

    Par défaut

    Bonjour,

    en reprenant ton code de manière plus optimale, cela donnerait ça :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    include 'sqlserver_vars.php';
     
    $sql  = isset($_GET['Requete']) ? $_GET['Requete'] : '';
    $data = array();
     
    if (strlen($sql)) {
       $cnx = odbc_connect("Driver={SQL Server};Server=$server;Database=$db",$dbUsername,$dbPassword) ;
       $qry = odbc_exec($cnx, $sql);
       while($row = odbc_fetch_array($qry)) {
          $data[] = array_map('utf8_encode', $row);
       }
    }
    odbc_close($cnx);
    echo json_encode($data);
     
    ?>
    # Dans la Création, tout est permis mais tout n'est pas utile...

  4. #4
    Futur Membre du Club
    Homme Profil pro Sid Ahmed TOUBAL
    Ingénieur développement logiciels
    Inscrit en
    juillet 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Nom : Homme Sid Ahmed TOUBAL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2010
    Messages : 56
    Points : 19
    Points
    19

    Par défaut

    merci pour votre réponse,
    efffictivement pour le push jai chercher la facilité, je vais faire des testes avec la nouvelle optimisation et je vous en dirais des nouvelles

  5. #5
    Futur Membre du Club
    Homme Profil pro Sid Ahmed TOUBAL
    Ingénieur développement logiciels
    Inscrit en
    juillet 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Nom : Homme Sid Ahmed TOUBAL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2010
    Messages : 56
    Points : 19
    Points
    19

    Par défaut

    je viens de faire un test , (tout les serveurs sont sur localhost)
    je m’attendait a voir une diference mais c'est finalement pareille
    après une dizaine d’exécutions de chaque version du scripte jais u :

    1. meilleure score pour l'ancien scripte : 5,95 secondes
    2. meilleure score pour le nouveau scripte : 5,05 secondes

    donc une seconde de mieux (c'est déjà ça) mais c'est aléatoire des fois les deux scriptes prennent jusqu’à 10 secondes
    apparemment c'est le fetch_row qui est lourd

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •