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

ASP.NET Discussion :

Gridview : Problème performance raffraichissement automatique


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut Gridview : Problème performance raffraichissement automatique
    Bonjour à tous,

    Je suis en train de développer un site web ASP.NET C#, et je voudrais raffraichir de la manière la plus fluide possible un tableau contenant les données d'une table contenant plus de 100 000 lignes d'une base de données placée sur une autre machine du même réseau intranet. En fait je voudrais que le tableau se raffraichisse exactement toutes les secondes, même si l'on connecte plusieurs utilisateurs en même temps, sachant que la table affichée se met à jour également toutes les secondes environ.

    J'ai essayé pour cela d'utiliser un GridView que je place dans un UpdatePanel, ainsi qu'un timer qui réalise un Databind() sur le GridView toutes les secondes. J'ai un bon rendu, mais l'actualisation ne se fait pas exactement toutes les secondes (ça doit metre 1,1 seconde), et ducoup lorsque l'on augmente le nombre d'utilisateurs, la durée de raffraichissement se rallonge (>2 secondes pour 10 utilisateurs simultanés).

    Ma source de données est un SqlDataSource et j'ai tenté de passer l'attribut DataSourceMode de mon objet à DataReader. J'ai également retiré la pagination et le trie pour optimiser mais les performances ne sont pas vraiment mieux.

    J'ai regardé sur le net pour voir ce qui se fait d'autre pour réaliser cette tâche, et je suis tombé sur ObservableCollection qui pourrait peut-etre faire l'affaire à la place de ce macanisme d'UpdatePanel. Mais je n'arrive pas à mettre de mécanisme de raffraichissement en place avec cet objet.


    Sauriez vous quel serait la meilleur méthode à employer pour faire ce raffraichissement automatique ? pour faire ça, je ne suis pas obligé d'utiliser un GridView mais ça peut être une liste toute simple pour augmenter les performances.

    Si quelqu'un avait une idée, ou même juste pourrait me décrire quels objets sont les mieux en terme de performance ça me serait d'une grande aide ?

    Merci beaucoup

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Y'a pas de meilleur méthode...

    Par contre, je ne vois pas l'intérêt de faire remonter 100000 lignes. C'est normal que ça prenne du temps. Sauvegarde ta page et regarde combien elle pèse. Execute la requete dans SQL Server Manager et vérifie combien de temps ça prend. Optimise ta requête. Mets les données en cache.

    Qui peut lire 100000 lignes toutes les secondes???

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    je suis d'accord avec immobilis....

    A mon avis tu te poses le problème a l'envers. Revoie ton besoin parce que rafffraichir 100 000 lignes toutes les secondes je n'arrive pas à m'en expliquer l'intérêt...

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut
    Salut,

    Merci pour ta réponse !

    Oui, ça parait dur de faire une telle requete en si peut de temps, mais avec ObservableCollection je me disais qu'il aurait peut-etre été possible de voir les lignes ajoutées à une table et de n'ajouter que celle-ci au tableau déjà rempli.

    En fait, mon besoin précis est d'afficher en temps réel les données les plus récentes d'une table d'évènements en faisant une requete simple suivi dans ORDER BY DateEvenement DESC.

    Tu penses vraiment qu'on ne puisse pas faire plus rapide qu'avec un UpdatePanel, même en utilisant par exemple comme affichage un label tout simple que l'on mettrait à jour grâce à du code javascript qui ferait une requete sql sur la base toutes les secondes ? Au niveau sécurité ce n'est pas terrible de faire des requetes dans du javascript, mais est ce que cela pourrait au moins augmenter les performances ?

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    La question de la performance ne se pose que lorsqu'on se rend compte que les performances sont mauvaises... Enfin, si tu veux y répondre correctement il faut que tu identifies les goulots d'étranglement. Où est-ce que ça coince?

    Pour moi c'est clairement la requête et ses 100000 enregistrements.
    mon besoin précis est d'afficher en temps réel les données les plus récentes d'une table d'évènements
    Et bien tu n'affiches que les derniers nouveaux enregistrements. Si il n'y en a que 10 tu affiches que 10. Ce sera plus clair.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    mon besoin précis est d'afficher en temps réel les données les plus récentes d'une table d'évènements en faisant une requete simple suivi dans ORDER BY DateEvenement DESC.
    Je comprends toujours pas.. Que tu veuilles afficher les évennements triés comme ça ok... Mais 100 000 quel intérêt ? pour quel but derrière ?

    Si c'est pour traiter dans un fichier ben alors pas la peine de les afficher... Si c'est pour le regarder a l'oeil .. j'aimerais bien savoir qui va regader 100 000 lignes raffraichi en temps réel..

    Les 500 derniers évenemments par exemple ca serait pas mieux ?


    Enfin bref sinon ya une solution :

    Tu utilises un numéro qui s'incrémente dans ta base évenement du coup chaque évennement a un numéro (de '1' a 'n') en fonction de son ancienneté.. ( évidemment tu crée un index sur ce numéro)

    Tu charges ton dataset avec tes 100 000 evenements ..
    La première requête sera longue.. A ce moment tu stockes le numéro de l'enreg le plus récent récupéré...

    Du coup au moment du refresh tu lances une requête du type Select evenement WHERE numéro > numérorécentstocké...

    du coup les requêtes de raffraichissement n'iront cherché que les derniers enregs...

    Si tu as vraiment besoin d'avoir strictement "100 000" enreg a l'affichage il faudra que tu supprimes 'n' enreg en fonction du nombre que tu auras ajouté en bas de ton dataset...


    Ca devrait largement optimisé ton traitement mais bon je vois toujours pas l'intérêt d'un tel traitement....

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut
    Désolé, je me suis mal exprimé, je ne veux pas afficher les 100 000 lignes, mais seulement les 30 lignes les plus récentes d'une table de 100 000 lignes. Actuellement je fais donc un
    SELECT TOP 30 * FROM MaTable ...
    pour récupérer ces lignes.

    Le temps d'exécution de la requete n'est donc pas si long que ça, mais le raffraichissement réalisé sur le tableau prend un peu trop de temps. J'ai lu aujourd'hui sur les forums qu'avec un UpdatePanel, c'est le serveur qui génère le code HTML de la partie de la page raffraichie et qui le renvoie au client (qui l'affiche sans le retraiter), alors que je pourrais utiliser de l'ajax 'pure' (ajax 4 je crois) qui ferait que le serveur n'enverrait au client que les données du tableau mise en forme ensuite par le client.

    ça vous dis quelque chose ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/10/2009, 19h28
  2. Raffraichissement automatique gridview
    Par Quatre_Couleurs dans le forum ASP.NET
    Réponses: 5
    Dernier message: 29/04/2009, 17h47
  3. Réponses: 3
    Dernier message: 29/08/2005, 15h33
  4. Problème performance SELECT avec jointure
    Par Netgamer dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/08/2005, 10h20
  5. [awt] Problème de raffraichissement de composant
    Par FakuFaku dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 21/07/2005, 18h32

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