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

VB.NET Discussion :

[SQL SERVER] Comment améliorer un chargement de données lent ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut [SQL SERVER] Comment améliorer un chargement de données lent ?
    Salut,

    Dans mon application Vb.NET, je me connecte à une base de données SQL Server. En progressant dans le développement, je me rends compte que mon application est un peu lente pour afficher les données. surtout dans le cas suivant :

    - J'ai une interface de recherche, j'entre un code, puis Rechercher, une autre interface s'affiche avec plusieurs onglets différents comprenants des zones de text, combos, grilles, ... alimentés avec des DataSet différents.
    Quand j'entre mon code, je remarque un petit temps de "recherche" ou "chargement" puis seulement mon interface affichant les résultats de l'enregistrement recherché.

    C'est vrai que je travaille sur une base comprenant des masses de données énormes, mais je veux savoir s'il ya moyen d'acceder à ces données en un temps record sans faire sentir à l'utilisateur le moindre laps de recherche.

    Quelqu'un a une idée?
    Merci.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    les dataset sont pratique mais sont des classes complexes avec des tas de variables de machins et de bidules
    c'est plus long à utiliser que de tout faire "à la main" avec un datareader
    m'enfin c'est pas censé plomber non plus (à part sur les datagrid avec au moins 1000 lignes)


    sinon il est parfois possible de traiter les données de manière asynchrone, sur un autre thread
    et une fois les données acquises il suffit de revenir sur le thread principal pour mettre à jour l'interface (seul le thread principal peut intervenir sur les controles)


    il est aussi possible de definir un pool de connexion de plusieurs centaines de connexions, ca evite de perdre du temps à ouvrir la connexion (mot clé à rajouter dans la chaine de connexion)


    il faudrait aussi voir si le temps perdu est coté .net ou coté sql server
    pour ca il y a sql server profiler, pas évident à comprendre comment ca marche au premier abord mais ca permet de voir le temps passé sur chaque requete qui passe
    les requetes qui sont anormalement longues (plusieurs 10aines de ms pour ramener 10lignes) il faut peut etre ajouter des index sur la base et regarder ensuite si ca a changé quelque chose sur le temps d'execution

    si ca vient d'sql et/ou que tu veux optimiser sql server il y a des articles très interressants ici
    http://sqlpro.developpez.com/
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Merci sperot pour ces explications.
    Je pense que le temps perdu est coté .NET vu que je ne me connecte pas encore à la base de donnée "Mode Création", je travaille sur un Mode Développement, enfin, une copie de la base en local. c'est pour ca que je m'inquiète pour le temps qui va encore s'aggraver quand je vais la mettre en route en liaison avec le serveur.
    En fait ce que j'ai remarqué en executant plusieurs fois, c'est que le temps perdu est bcp plus apparant à la première fois qu'on on lance l'application, pour le reste, c'est lent, mais pas si lent qu'au début.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    que le serveur soit local ou distant je pense pas que ca change trop
    le volume des données par contre oui ...
    enfin sqlpro explique que sur une base de données bien pensée et bien administrée, il y a peu de différences entre le début de l'exploitation et 5 ans plus tard

    sinon le fait que ca soit lent le première fois, c'est une spécificité de .net, le code est compilé à la volée la première fois qu'il est vu (sub par sub surement ...)
    le code compilé est ensuite supprimé du cache à la fin de l'execution etc..

    il est possible de compiler un exe .net en exe natif avec ngen fourni par microsoft, ca gagne pas mal de temps à l'ouverture de l'appli

    sinon y a des différences de performances notables entre le mode debug et le mode release (ne jamais deployer un exe en mode debug d'ailleurs)
    donc tu peux tester en release et hors vs pour voir si c'est pareil

    sinon il y a aussi les system.diagnostics.stopwcatch qui sont des chrono, avec .start .stop .reset et .elapsedmilliseconds
    en mette un peu partout avec des point d'arret pour voir le temps passé, ca peut aider à voir ce qui prend du temps, ca permet aussi de mettre en évidence le temps entre le premier passage et les autres
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Excellente ton explication.

    Le lien de sqlpro est très interessant, mais je ne sais pas si je peux faire grande chose coté serveur ou optimiser la base de données, ce n'est pas moi qui l'ai développer.
    En fait, je vais essayé plutôt d'optimiser mon code .Net avec les différentes manières que tu m'a expliquer.

    Merci.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    pour compléter :
    le code vb.net ou c# est compilé par visual studio en MSIL (langage beaucoup moins lisible mais quand même plus que de l'assembleur)

    lors de l'execution il est compilé de MSIL à code natif par le JIT (just in time compiler je crois)


    c'est pour ca qu'avec reflector, une exe ou une dll .net sont décompilables dans un des langage .net au choix (alors qu'un exe natif, c'est beaucoup moins décompilables)
    par contre utiliser ngen permet d'accélérer le code, mais l'exe .net doit rester sur la machine quand même donc c'est pas une solution pour protéger le code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/04/2011, 14h04
  2. Réponses: 17
    Dernier message: 22/09/2006, 17h34
  3. [Oracle/SQL-Server] Comment crypter une base de données ?
    Par [DreaMs] dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 28/11/2005, 18h02
  4. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  5. [SQL server][TDbRichEdit] Mise à jours base de donnée
    Par Revan012 dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/06/2004, 12h12

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