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 :

problème du temps d'exécution


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 60
    Points
    60
    Par défaut problème du temps d'exécution
    Bonjour,


    J'ai besoin de votre aide.
    J'ai trouvé une solution pour le calcul d'une moyenne (dans une autre discussion) voici le code:
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Dim date_min, date_finale, date_j As Date
            Dim somm, ap_j, moy As Double
            Dim num_j_min, num_mois_min, num_mois_actuel, num_an_actuel, nbre_j_mois_actuel, num_an_minimale, nbre_ans, an, i, j As Integer
            'on initialise i à 1
            i = 1
            'date minimale dans la base
            date_min = Me.Historiques_barragesTableAdapter1.ScalarQueryMin_Date()
     
            'num jour de la date minimale
            num_j_min = date_min.ToString("dd")
     
            'num mois de la date min
            num_mois_min = date_min.ToString("MM")
     
            'num de l'année de la date minimale
            num_an_minimale = date_min.ToString("yyyy")
     
            'num mois actuel
            num_mois_actuel = DateTimePicker1.Value.ToString("MM")
     
            'num de l'année actuelle
            num_an_actuel = DateTimePicker1.Value.ToString("yyyy")
     
            'nombre de jour du mois actuel
            nbre_j_mois_actuel = Date.DaysInMonth(num_an_actuel, num_mois_actuel)
            ' on initilise an à 
            an = num_an_minimale
            'date final de control
            date_finale = CDate(nbre_j_mois_actuel & "/" & num_mois_actuel & "/" & an)
     
            'on initialise le nombre d'années à 0
            nbre_ans = 0
            'on initilise la somme à 0
            somm = 0
            If (num_mois_min < num_mois_actuel) Or (num_mois_min = num_mois_actuel And num_j_min = 1) Then
                an = num_an_minimale
                       Else : an = num_an_minimale + 1
                      End If
            Do While DateTime.Compare(DateTimePicker1.Value.ToShortDateString, date_finale.ToShortDateString) > 0
                           For j = 1 To nbre_j_mois_actuel
                    date_j = CDate(j & "/" & num_mois_actuel & "/" & an)
                    ap_j = CDbl(Me.Matable.GetDataBy(i, date_j.ToShortDateString).Item(0).X)
                    somm = somm + ap_j
                Next
                nbre_ans = nbre_ans + 1
                an = an + 1
                date_finale = CDate(nbre_j_mois_actuel & "/" & num_mois_actuel & "/" & an)
            Loop
                  moy = somm / nbre_ans

    le problème c'est que je dois éxécuter ce code trois fois pour obtenir un fichier donné, et ceci prend beaucoup de temp.
    Avez- vous une solution pour minimiser le temps d'éxécution?
    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Je pense qu'il est plus rapide ( à confirmer) de faire un calcul en utilisant des variables que la valeur des propriétés d'un objet.

    Donc transfert un max de ces valeurs dans des variables et fait les calculs ensuite.

    aussi je pense ( Si Si c'est pas des conneries Je pense) :
    qu'il est préférable que tu fasses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    date_j = CDate(j & "/" & num_mois_actuel & "/" & an).ToShortDateString
                    ap_j = CDbl(Me.Matable.GetDataBy(i, date_j).Item(0).X)
    Refais tes retraits STP c'est imbuvable. JE suis un débutant aussi donc j'essai qu'on puisse relire mon code sans mal de tête fis en de même.


    après essai de faire une Fonction de Tout ça que tu appelles quand tu en as besoin

  3. #3
    Membre actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Points : 205
    Points
    205
    Par défaut
    Bonjour.

    S'agit-il d'une moyenne de plusieurs dates ?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    au lieu de nous mettre du code illisible il aurait été préférable de nous dire ce que tu as au départ et ce que tu veux en sortie

    il y a toujours plusieurs facon de faire quelque chose, ici tu sembles avoir choisi la mauvaise ^^

    (quant aux variables plutot que propriété d'objet, ca dépend de l'objet, mais dans la majorité des cas ca ne change pas grand chose)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Salut

    au lieu de nous mettre du code illisible il aurait été préférable de nous dire ce que tu as au départ et ce que tu veux en sortie
    la discussion suivante explique ce code:
    http://www.developpez.net/forums/d12...alcul-moyenne/

    J'ai pas reussi à le faire dans une fonction.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    votre explication sur l'autre topic n'est pas claire non plus

    par contre une chose est sure, vous êtes sur une mauvaise piste
    une moyenne ca se fait un millième de seconde et 2 lignes de code ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    l'explication est claire pour ceux qui veulent la comprendre.
    Celui qui n'a pas compris le problème ne peux pas juger aucune solution et merci.

  8. #8
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    On essaye de comprendre ce que tu veux.

    Voila ce que je comprends tu recupere des données d'une Base de données avec des dates et des valeurs ?

    a) Tu veux calculer la moyenne journalière de la valeur X entre la date de la Base de donnée et aujourd'hui afin de faire une projection pour le restant de l'année ?
    b) tu fais la somme des valeurs X de la base de données et tu veux faire une moyenne journalière de l'origine à aujourd'hui ?

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Salut

    J'essaie d'éclaircir le problème:
    J'ai des valeurs x journalières. donc la base contient la date et la valeur x.
    Le but est de Calculer la moyenne du mois donc je dois faire la somme des x pour chaque mois complet (le mois doit etre terminé pour l'entrer dans la somme) puis on divise la somme sur la nombre d'année.
    Pour cela j'ai fait beaucoup de controle sur la date.

    est-il clair Achireon?

  10. #10
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Donc en gros tu veux faire une moyenne Mensuelle de tes relevés jusqu'au dernier mois finis puis la moyenne annuelle jusqu'a la derniere année validée par année.

    Je vais reflechir a l'Equation présentée ainsi ce n'est pas si compliqué que ca.

    JE réfléchis a une méthode en pseudo Code dans la journée après je verrai en vb.net

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Oui c'est la moyenne mensuelle (la moyenne de chaque mois du janvier à décembre).
    Le contrôle sur les dates allourdit l'éxécution en plus la base est très grande.
    Merci.

  12. #12
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    tu a des relevés les Week End ou non ? tu fais une moyenne sur les jours ouvrables ? ouvrés?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il te manque toujours la clarté dans la définition de ce que tu veux

    si tu veux la moyenne par mois de l'année sur x années avec des enregistrement par jour :

    en requete ca doit donner un truc dans le genre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select month(date), sum(x) / @nbannées
        from table 
        group by month(date)

    @nbannées peut se calculer si tu ne le connais pas (là aussi on a pas d'infos si tu as des filtres de date sur la table)

    en vb.net c'est faisable aussi, avec calcul du nombre d'années intégré ca donne quelque chose qui peut ressembler à ca :

    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
    cmd.commandtext = "select date, x from table"
    dim reader = cmd.executereader
     
    dim resultat as new dictionary (of integer, decimal) ' mois, somme pour ce numéro de mois (puis moyenne à la fin)
    dim minannee as integer?
    dim maxannee as integer?
     
    while reader.read
       dim dt as date = directcast(reader.item("date"),date)
       dim nb as decimal = cdec(reader.item("x"))
     
       if minannee.hasvalue = false orelse dt.year < minannee.value then minannee = dt.year
       if maxannee.hasvalue = false orelse dt.year > maxannee.value then maxannee= dt.year
     
    ' somme
       if not resultat.containskey(dt.month) then 
          resultat.add(dt.month,nb)
        else
          resultat(dt.month) += nb
        end if
     
    end while
     
    ' moyenne
    for each mois as integer in resultat.keys
        resultat(mois) = resultat(mois) / (maxannee - minannee + 1)
    next
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre du Club
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Ashireon Voir le message
    tu a des relevés les Week End ou non ? tu fais une moyenne sur les jours ouvrables ? ouvrés?
    Oui Ashireon, j'ai des relevés pour tous les jours.


    Merci POl63, je veux essayer de trouver une solution à partir de ce que vous m'avez proposé.

Discussions similaires

  1. [Admin] Problème de temps d'exécution d'un rapport Webi
    Par zaza78 dans le forum Administration-Migration
    Réponses: 7
    Dernier message: 28/09/2010, 10h58
  2. Réponses: 1
    Dernier message: 28/09/2009, 08h30
  3. Problème de temps d'exécution aléatoire
    Par ouis dans le forum SQL
    Réponses: 4
    Dernier message: 04/09/2008, 09h55
  4. [SqlServer2000] Problème de temps d'exécution d'une proc stock
    Par GuillaumeBibaut dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 20/11/2006, 14h31
  5. [SQL] Problème de temps d'exécution maximum
    Par manshoon dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/05/2006, 14h07

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