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

Développement Windows Discussion :

Vitesse d’exécution d'une application


Sujet :

Développement Windows

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut Vitesse d’exécution d'une application
    Bonjour,
    J'ai développé une application windows application sous visual studio 2010
    Cette application permet d'extraire des données des pages web, le problème c'est que pour son exécution il faudra bcp de temps ce qui est normal puisque j'ai bcp de boucles et de contrôles.
    Mon souci c'est que lorsque j’exécute mon programme, ce dernier se plante pendant quelques minutes puis m'affiche le résultat. Ce que je souhaite c'est que l’exécution se fait d'une manière pas très rapide pour que le programme ne se plante plus et pour que j'affiche l’état d'avancement de ma capture au fur à mesur de l’exécution.
    Quelques idées ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour ne pas bloquer l'interface, il faut effectuer le traitement dans un autre thread ; si tu le fais sur le thread de l'interface graphique (thread "principal"), celle-ci ne peut plus se rafraichir ni réagir aux évènements tant que le traitement n'est pas terminé. La solution la plus simple est d'utiliser un BackgroundWorker ; il y a plein de tutoriels à ce sujets, tu devrais en trouver facilement...

    Ensuite, il faut voir si tu ne peux pas améliorer le traitement proprement dit ; quelle technique utilises-tu actuellement ? Pour extraire des données de pages web, le plus efficace est d'utiliser HTML Agility Pack (voir mon tuto à ce sujet)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Merci pour votre réponse
    Je me suis déjà de votre forum pour ça
    J'utilise la technologie VB.net.
    Je vais faire quelques recherches sur BackgroundWorker et je viendrai vers vous pour vous parler de l'état de mon avancement.
    Bonne journée

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Re tomlev,
    j'ai fait ceci :

    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
     
     
      Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
     
            ListBox1.Items.Clear() 
            BackgroundWorker1.RunWorkerAsync() 
        End Sub
     
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            e.Result = Traitement()
        End Sub
     
     
        Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
            ProgressBar1.Value = e.ProgressPercentage 'avancement de l'opération
        End Sub
     
     
        Public Function Traitement() As ArrayList
     
     
            For ...
                For ..... 
     
                       //   Mon traitement
                                Next
                                  BackgroundWorker1.ReportProgress(CInt(k / division))              
                           Next
            Next
            Return Traitement
        End Function
     
     
        Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
      //mon traitement
     
        End Sub


    dans la ligne :
    BackgroundWorker1.ReportProgress(CInt(k / division))
    j'ai eu ce message d'erreur :
    Ce BackgroundWorker précise qu'il ne signale aucune progression. Modifiez WorkerReportsProgress afin qu'il signale bel et bien une progression.
    Ai je oublier quelque chose ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Meher001 Voir le message
    Ce BackgroundWorker précise qu'il ne signale aucune progression. Modifiez WorkerReportsProgress afin qu'il signale bel et bien une progression.
    Bah il suffit de faire ce que dit le message d'erreur... à savoir mettre à True la propriété WorkerReportsProgress du BackgroundWorker.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Oui il faux activer l'option WorkerReportsProgress de mon BackgroundWorker, par défaut il est desactiver.
    Merci tomlev

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

Discussions similaires

  1. Afficher des bitmaps à haute vitesse dans une application fenêtrée
    Par acanicio dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 27/10/2006, 23h35
  2. Afficher des bitmaps à haute vitesse dans une application
    Par acanicio dans le forum API graphiques
    Réponses: 1
    Dernier message: 27/10/2006, 11h03
  3. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 15h39
  4. [Kylix] Execution d'une application hors de l'edi
    Par Sadam Sivaller dans le forum EDI
    Réponses: 1
    Dernier message: 21/04/2002, 00h22
  5. Réponses: 2
    Dernier message: 15/04/2002, 13h56

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