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 :

programme qui s'execute trop lentement


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 58
    Par défaut programme qui s'execute trop lentement
    bonsoir j'utilise vb.net et a la fin de l'application je constate que le programme exécute trop lentement mais je pense qu'une partie du code est la cause principal

    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
    k = 0
            If tableau_structure.Count >= 1 Then
     
     
                Do
                    If tableau_structure(k).operateurs = intermediate.operateurs And tableau_structure(k).country = intermediate.country And tableau_structure(k).int_outband = intermediate.int_outband And tableau_structure(k).tcapops = intermediate.tcapops Then
     
                        intermediate.tentatives = tableau_structure(k).tentatives + 1
                        intermediate.succes = 0
                        tableau_structure(k).tcap_id.Add(tcap_origine)
     
                        intermediate.tcap_id = tableau_structure(k).tcap_id
                        'ajout
                        intermediate.tcapops = tcap
     
                        tableau_structure.Remove(tableau_structure(k))
                        tableau_structure.Insert(k, intermediate)
                        flag_3 = True
     
                    End If
                    k = k + 1
                Loop Until flag_3 = True Or k > tableau_structure.Count - 1
            End If
     
            If flag_3 = False Then
     
                intermediate.tentatives = 1
                intermediate.tcap_id.Add(tcap_origine)
                'ajout
                intermediate.tcapops = tcap
     
                intermediate.succes = 0
                tableau_structure.Add(intermediate)
     
            End If

    -tableau_structure est une liste de classe que j'ai définie en bas et dans lequel toutes les informations relatifs pour chaque opérateur seront écrits dedans
    - intermediate est un objet de type information définit ci dessous
    ( Dim intermediate As New information)

    ce que j'ai postulé ci dessus est une partie d'une fonction dans laquelle je cherche en premier la classe dans ma liste de classe qui a les 3 criteres (operateurs country, int_outbound) donc si je le trouve j’incrémente le nombre de tentatives si non je crée une nouvelle classe dans laquelle je met toutes les informations de l’opérateur en question.
    ma question est ; est ce qu'il n'existerait pas une fonction de VB.net qui ferait le travail plus rapidement c'est ça le challenge



    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
    Public Class information
        Public tentatives As Integer
        Public operateurs As String
        Public country As String
        Public int_outband As String
        '  Dim struct_error As List(Of erreur)
        'Dim ssn1 As String
        'Dim ssn2 As String
        Public succes As String
     
        Public origines As String
        Public destinations As String
        Public tcapops As String
        Public i As Integer
        Public taille As Integer
        Public tcap_id As List(Of String)
        Public nombre_erreur As New List(Of Integer)
        Public type_erreur As New List(Of String)
        Public index As Integer
        'Dim nbre_faute As Integer
        Public faute As String
    End Class
    Merci de m'aider

  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
    Citation Envoyé par wahidred Voir le message
    le programme exécute trop lentement
    c'est à dire ?
    nombre d'éléments dans la collection ?


    il y a plusieurs manières d'optimiser le code, enfin il faudrait qu'on comprenne bien le fonctionnement

    déjà avec des AndAlso à la place des And tu vas gagner un pouième
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Salut

    ce n'est pas plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Public tcap_id As new List(Of String)
    je constate que le programme exécute trop lentement
    c'est à dire ?

  4. #4
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 58
    Par défaut
    bonjour
    en réalité moi je lis un fichier CSV ligne par ligne et pour chaque ligne je fait appel a cette fonction , celle ci cherche tout d abord de quel opérateur s'agit il ainsi que int_outbound et le country (cette partie du code je ne l'ai pas afficher en haut) , temporairement je les met dans une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim intermediate As New information
    maintenant avec ça je peut aller comparer dans mes structures précédentes est ce qu'il y a une d'entre elle qui possède les même info que dans cet objet si oui j’incrémente le nombre de tentatives et je réinséré tout dans la structure en question si non j'ouvre une nouvelle structure dans laquelle je met toutes les nouvelles informations , voila moi je cherche a optimiser le code "gagner un peu de temps" en utilisant une méthode de vb par ex car plus le fichier csv et grand et plus le temps d'afficher les résultats est conséquent , trop même car jai fait un essai , un fichier excel de 8000 lignes est resté 5 seconde pour s'executer

    j’espère que m'avez compris

    aidez moi svp

  5. #5
    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
    le mieux serait d'avoir un identifiant pour retrouver opérateur, qu'il soit significatif ou non, le but c'est juste pour ne pas perdre de temps à lire 4 colonnes
    si tu as une colonne qui te permet de le déterminer, alors il te faut un system.collections.generic.dictionary(of T, T2)
    T étant le type de la colonne qui te permet d'identifier l'opérateur, T2 étant le type avec les infos de l'opérateurs)

    ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if not dico.containskey(valeurIDoperateurDUfichier) then
       dim instance as new letypedeT2
       instance.tellepropriété = valeur du fichier
       ...
       dico.add(valeurIDoperateurDUfichier, instance)
      else
       dico(valeurIDoperateurDUfichier).tentatives += 1
    end if
    le dictionaire a un accès instantané sur la clé, ca évite donc de reparcourir toute la collection pour savoir si quelque s'y trouve
    car si tu as 8000 lignes, tu vas lire une ligne de ta collection au 2ème tour, 2 lignes au 3ème tour, jusqu'à 7999 lignes au 8000ème tour
    avec le dictionary tu ne vas lire que la bonne (enfin si on omet le parcours de la table de hashage ^^)

    sinon tu peux tester le temps d'exécution avec system.diagnostics.stopwatch (.start, .stop, .elapsedmilliseconds)
    tu peux donc connaitre le temps de lecture et parsing du fichier, et le temps de traitement derrière
    si le temps de lecture du fichier est long, tu pourras faire du multithreading pour traiter au fur et à mesure ce que tu lis, mais je ne pense pas que ca soit le cas (parce qu'en général on fait lecture du fichier complet puis traitement pour avoir un code plus lisible, je ne suis pas sur que c'est ce que tu fais)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. programme qui plante lorsque trop de calculs
    Par kipgon dans le forum C++
    Réponses: 9
    Dernier message: 28/05/2013, 16h25
  2. Programme qui s'execute deux fois
    Par Potzo dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/08/2010, 13h39
  3. Trouver le programme qui s'execute toutes les 10 minutes
    Par sboffin dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 22/03/2007, 17h37
  4. Un programme qui s'auto-execute
    Par DJ@M's dans le forum C
    Réponses: 6
    Dernier message: 16/10/2005, 13h00
  5. programme qui s ouvre, execute et se ferme ..
    Par hijodelanoche dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2005, 09h37

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