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 :

Accélérer le traitement [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut Accélérer le traitement
    Bonjour,
    J'aimerai savoir si une fonction existe pour accélérer l les exécution du code ,car par moment je trouve qu'il met du temps a l exécuter

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonjour,
    Il n'y a pas à ma connaissance de fonction qui permette d'accélérer l'exécution du code.
    Par contre il y a tout un tas de bonnes pratiques pour ne pas ralentir son exécution.

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Select Case MonObjet
    Case ...
    Case ...
    ...
    End Select
    'est mieux que
    If .... Then
    Else If ...
    Else If ...
    Else
    ...
    End If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Utiliser
    With MonObjet
    .Nom= ...
    _Prénom=.GetPrenom(i)
    .
    End With
    'Est mieux que:
    MonObjet.Nom=...
    _Prénom=MonObjet.GetPrenom(i)
    Car dans ce cas, MonObjet est réévalué à chaque fois
    Pour l'accès aux données, il faut prendre l'habitude de rapatrier seulement les données dont on a besoin ainsi si on a besoin que, par exemple du nom d'un client, la requête "SELECT NomClient FROM Clients" est plus performante que "SELECT * FROM Clients".
    On peut aussi effectuer les longs traitements en arrière plan sur un thread différent.

    Il y a beaucoup de façons d'optimiser le code qui, je pense s'apprennent en lisant et en comparant le code que l'on fait avec celui que partagent les membres du forum.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    J ai regardé un peu le cours vb net sur le threading,est ce que cela peut se faire en fonction et peut on rattache cela à une progressbar dans le sens ou le temps de chargement en fond de tâche soit affiché en progressbar

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Rainui Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Select Case MonObjet
    Case ...
    Case ...
    ...
    End Select
    'est mieux que
    If .... Then
    Else If ...
    Else If ...
    Else
    ...
    End If
    L'utilisation de l'un ou l'autre n'aura aucune incidence en terme de performance. En effet si tu regardes l'IL généré, le If/Else est remplacé par un Case. Donc dans l'absolu, ce serait plutôt l'inverse. Mais ce n'est pas là qu'il faut chercher des problèmes de performance, c'est plus une question de lisibilité du code...

    Citation Envoyé par chuspyto
    J ai regardé un peu le cours vb net sur le threading,est ce que cela peut se faire en fonction et peut on rattache cela à une progressbar dans le sens ou le temps de chargement en fond de tâche soit affiché en progressbar
    Oui c'est faisable, le moyen le plus simple est d'utiliser un BackgroundWorker.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonjour,

    J'ai recherché un bon moment le document que j'avais lu et qui m'a fait dire que Select Case est plus optimisé que If ElseIf ...

    Cours VB.Net de Mr Plasserre / Optimisation du code

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Rainui Voir le message
    J'ai recherché un bon moment le document que j'avais lu et qui m'a fait dire que Select Case est plus optimisé que If ElseIf ...

    Cours VB.Net de Mr Plasserre / Optimisation du code
    Je serais curieux de savoir comment a été mesuré le fait que ça soit 20% plus rapide. Je reste très sceptique.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    Est ce que je doit utiliser la fonction backgroundworker ou le code du post#9 suffirai?

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    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 202
    Par défaut
    Citation Envoyé par chuspyto Voir le message
    J'aimerai savoir si une fonction existe pour accélérer l les exécution du code ,car par moment je trouve qu'il met du temps a l exécuter
    si c'était possible, ca voudrait dire que le code est ralenti volontairement, ce qui n'a pas de sens

    le code s'exécute aussi vite qu'il peut, par contre ca dépend de ce que tu as écris
    il y a toujours des dizaines de moyens de faire une chose, par contre certaines sont beaucoup plus performantes que d'autres
    par contre sans explication ni code on ne pourra t'indiquer de pistes

    le multithreading permet dans certains cas de gagner du temps, mais ce n'est pas forcément quelque chose à mettre entre les mains d'un débutant
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    voici un bout du code c'est a l'appel de traitement boucle que l'affichage est chargement des images est long.

    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
     Select Case True
     
                Case Me.J.Checked And Me.E.Checked And Me.B.Checked And Me.R.SelectedItem = "A"
                    basdef = "Table1"
                    jpg = "Table1_JPEG"
                    traitement_boucle(1, 40, jpg, basdef)
                Case Me.J.Checked And Me.E.Checked And Me.B.Checked And Me.R.SelectedItem = "b"
                    basdef = "Table2"
                    jpg = "Table2_JPEG"
                    traitement_boucle(2, 40, jpg, basdef)
                Case Me.J.Checked And Me.E.Checked And Me.B.Checked And Me.R.SelectedItem = "C"
                    basdef = "Table3"
                    jpg = "Table3_JPEG"
                    traitement_boucle(3, 40, jpg, basdef)
    ......
    end select
    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
    Private Sub traitement_boucle(ByVal cas As String, ByVal boucle As Integer, ByVal jpg As String, ByVal basdef As String)
            Dim Xwmp As IWMPMedia
            Dim lecture As String
            Dim cmd As OleDbCommand = cnn.CreateCommand
            Dim cmds As OleDbCommand = cnn.CreateCommand
            affichage_vignettes()
            For i = 1 To boucle
     
                cmd.CommandText = String.Format("SELECT  Chm from {0} WHERE [ID] =" & i, jpg)
     
                cnn.Close()
                cnn.Open()
                Dim Lecturejpg As OleDbDataReader = cmd.ExecuteReader
     
                While Lecturejpg.Read()
     
                    DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).Visible = True
                    Xwmp = DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).newMedia(Lecturejpg(0))
                    DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).currentPlaylist.insertItem(0, Xwmp)
                    DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).Ctlcontrols.play()
                    DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).Ctlcontrols.pause()
     
                End While
     
                cmds.CommandText = String.Format("SELECT eti from {0} WHERE [ID] =" & i, basdef)
                cnn.Close()
                cnn.Open()
                Dim Lectureeti As OleDbDataReader = cmds.ExecuteReader
     
                While Lectureeti.Read()
                    Lecture = Lectureeti.GetString(0).Replace("_", " ")
                    DirectCast(Me.Controls("Label" & i), Label).Visible = True
                    DirectCast(Me.Controls("Label" & i), Label).Text = System.IO.Path.GetFileNameWithoutExtension(lecture)
                End While
     
            Next
     
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Private Sub affichage_vignettes()
            Dim i As Integer
            Me.AxWindowsMediaPlayer3000.currentPlaylist.clear()
            For i = 1 To 40
                DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).currentPlaylist.clear()
                DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).Visible = False
                DirectCast(Me.Controls("Label" & i), Label).Visible = False
            Next
        End Sub

  10. #10
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    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 202
    Par défaut
    voilà par exemple ce qu'il ne faut pas faire

    si boucle vaut 40 tu vas ouvrir 80 fois une connection, exécuter 80 requetes, alors que ca peut se faire avec une seule requête qui fait le tout

    voir jointures pour ramener des infos de plusieurs tables, et faire une requete sans le where (ou un where sur une liste) et traiter selon l'id dans la boucle
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    est ce que je peux avoir 2 boucles de lectures pour extraires mes 2 donnees?
    est ce que cela est bon?
    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
       For i = 1 To boucle
    cmd.CommandText = String.Format("SELECT  Eti, Chm from {0} INNER JOIN {1} JPG.ID=BASDEF.ID WHERE [ID] =" & i, jpg,basdef), cnn)
     Dim Lecturejpg As OleDbDataReader = cmd.ExecuteReader
     While Lecturejpg.Read()
     
                    DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).Visible = True
                    Xwmp = DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).newMedia(Lecturejpg(0))
                    DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).currentPlaylist.insertItem(0, Xwmp)
                    DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).Ctlcontrols.play()
                    DirectCast(Me.Controls("AxWindowsMediaPlayer" & i), AxWindowsMediaPlayer).Ctlcontrols.pause()
     
                End While
     
     Dim Lectureeti As OleDbDataReader = cmds.ExecuteReader
     
                While Lectureeti.Read()
                    Lecture = Lectureeti.GetString(0).Replace("_", " ")
                    DirectCast(Me.Controls("Label" & i), Label).Visible = True
                    DirectCast(Me.Controls("Label" & i), Label).Text = System.IO.Path.GetFileNameWithoutExtension(lecture)
                End While

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    Sinon j utiliser déjà le sélect case

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

Discussions similaires

  1. [XL-2010] Accélérer le traitement de suppression de l'espace de fin
    Par Poussemousse dans le forum Excel
    Réponses: 11
    Dernier message: 13/02/2015, 14h20
  2. Réponses: 1
    Dernier message: 20/05/2014, 15h43
  3. Accélérer un traitement.
    Par BuzzLeclaire dans le forum Langage
    Réponses: 5
    Dernier message: 26/12/2008, 22h15
  4. Accélérer le traitement d'un array
    Par Kaliseo dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2008, 09h23

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