begin process at 2010 02 10 10:37:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

J'AI BESOIN D'AIDE !!!! :)

 > 

Problème lenteur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème lenteur

mercredi 20 juillet 2005 à 19:33:15 | Problème lenteur

damien174

bonjour j'aurais une petite question, j'ai fait un datalogger en VB6 (pour station de météo) et j'ai une fonction pour calculé le vent dominant qui est tres longue, avez-vous une sugestion pour quelle soit boucoup plus rapide ?

Public Function Calcul_Dominant_1(Valeur_Date As String) As String
    Dim MySql As New ADODB.Recordset
    Call MySql.Open("SELECT V_Dir FROM Tab_vents WHERE jours_r='" & Left(Valeur_Date, 4) & "-" & Mid(Valeur_Date, 6, 2) & "-" & Mid(Valeur_Date, 9, 2) & "' AND V_Moy <> 0 ", cn, adOpenDynamic)
    Dim Tmp As String
    Dim G As Integer, H As Integer
    Dim I As Integer
    I = 0
    For G = 0 To 15
        Nombre_D(G) = 0
    Next G
    While Not MySql.EOF
        Tmp = Conv_Vent_Num_Dir(Val(MySql!V_Dir)) ' retourne le nom de la direction par rapport a l'angle
        For G = 0 To 15
            If Direction_D(G) = Tmp Then Nombre_D(G) = Nombre_D(G) + 1
        Next G
        MySql.MoveNext
 '       DoEvents
    Wend
    MySql.Close
    H = 0
    For G = 0 To 15
        If Nombre_D(G) > H Then
            Calcul_Dominant_1 = Direction_D(G)
            H = Nombre_D(G)
        End If
    Next G
End Function

merci

cyberdam

mercredi 20 juillet 2005 à 20:51:18 | Re : Problème lenteur

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Public Function Calcul_Dominant_1(Valeur_Date As String) As String
    Dim MySql As New ADODB.Recordset
    Call MySql.Open("SELECT V_Dir FROM Tab_vents WHERE jours_r='" & Left(Valeur_Date, 4) & "-" & Mid(Valeur_Date, 6, 2) & "-" & Mid(Valeur_Date, 9, 2) & "' AND V_Moy <> 0 ", cn, adOpenDynamic)
    Dim Tmp As String
    Dim G As Integer, H As Integer
    Dim I As Integer
    I = 0
    For G = 0 To 15
        Nombre_D(G) = 0
    Next G
    While Not MySql.EOF
        Tmp = Conv_Vent_Num_Dir(Val(MySql!V_Dir)) ' retourne le nom de la direction par rapport a l'angle
        For G = 0 To 15
            If Direction_D(G) = Tmp Then Nombre_D(G) = Nombre_D(G) + 1
        Next G
        MySql.MoveNext
        DoEvents
    Wend
    MySql.Close
    H = 0
    For G = 0 To 15
        If Nombre_D(G) > H Then
            Calcul_Dominant_1 = Direction_D(G)
            H = Nombre_D(G)
        End If
    Next G
End Function

Pourquoi avoir mis en commentaire le DoEvents ? Remets le, ca devrait te faire gagner pas mal de temps !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
mercredi 20 juillet 2005 à 21:00:04 | Re : Problème lenteur

damien174

oui merci mais j'aime pas trop mettre de doevents car apres j'ai des dépassements de piles.
mais sinon y a pas un autre moyen de faire mon calcul plus simplement ou travaillé en mémoire pour accelérer la function ?

cyberdam
mercredi 20 juillet 2005 à 22:39:21 | Re : Problème lenteur

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Un DoEvents qui te provoque des dépassement de piles ??? Je ne vois pas trop le rapport : La pile sature lorsqu'on appelle des fonctions récursives indéfiniment. Le DoEvents sert à donner la main à Windows pour raffraichir les contrôles, et donner la main aux autres processus, ce qui, contrairement à ce qu'on peux penser, accèlére une fonction qui est trop longue car on ne sature plus les messages de Windows.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
jeudi 21 juillet 2005 à 00:05:38 | Re : Problème lenteur

Warning

Administrateur CodeS-SourceS
Salut, je crois que tu t'egare là DarkSidious, DoEvents ne sert et ne servira jamais a accelerer une fonction, mais sert a donner la main au system pendant l'execution de la fonction en permettant d'autres fonction de s'executer, ce qui au contraire ralenti cette fonction. De plus, il est vrai que l'utilisation de DoEvents n'est pas conseiller dans le cas ou une fonction s'execute evenementiellement parlant, car cette meme fonction peut s'executer plusieurs fois, et dans ce cas generer un depassement de pile.

Warning
Admin Codes-Sources.com
http://www.decompiler-vb.net/

jeudi 21 juillet 2005 à 09:25:07 | Re : Problème lenteur

Ricks27

Bonjour,

En ce qui concerne le "DoEvents", je suis tout à fait d'accord avec Warning.

Par contre, si tu veux optimiser ta routine, tu peux utiliser les Index si ta basse de données est une base de données Access.

Le gain de temps est concequent . En effet, les index evitent de parcourir tout tes enregistrements pour trouver ceux qui t'intéressent. Tu te positionne directement sur les enregistrements que tu as besoin.

Si tu n'as jamais utilisé les index, je peux te poster un exemple et t'expliquer brièvement.

Ricks27
jeudi 21 juillet 2005 à 10:11:00 | Re : Problème lenteur

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Ben il suffit de faire un sémaphore pour éviter les problèmes d'appel consécutifs suite à un appel de fonction par un événement...

Je persiste à dire que le DoEvents permet quand même d'obtenir plus de rapidité dans une longue boucle car il  évite de bloquer le système !

Dans des petites fonctions, je suis d'accord que le DoEvents ralentit l'éxécution, mais dans une longue fonction y'a pas photo !

Donc une petite sémaphore devrait régler le problème de dépassement de pile :

Public Function Calcul_Dominant_1(Valeur_Date As String) As String
Static bFinish As Boolean
    if Not bFinish Then Exit function
    if bFinish Then let bFinish = False
    Dim MySql As New ADODB.Recordset
    Call MySql.Open("SELECT V_Dir FROM Tab_vents WHERE jours_r='" & Left(Valeur_Date, 4) & "-" & Mid(Valeur_Date, 6, 2) & "-" & Mid(Valeur_Date, 9, 2) & "' AND V_Moy <> 0 ", cn, adOpenDynamic)
    Dim Tmp As String
    Dim G As Integer, H As Integer
    Dim I As Integer
    I = 0
    For G = 0 To 15
        Nombre_D(G) = 0
    Next G
    While Not MySql.EOF
        Tmp = Conv_Vent_Num_Dir(Val(MySql!V_Dir)) ' retourne le nom de la direction par rapport a l'angle
        For G = 0 To 15
            If Direction_D(G) = Tmp Then Nombre_D(G) = Nombre_D(G) + 1
        Next G
        MySql.MoveNext
        DoEvents
    Wend
    MySql.Close
    H = 0
    For G = 0 To 15
        If Nombre_D(G) > H Then
            Calcul_Dominant_1 = Direction_D(G)
            H = Nombre_D(G)
        End If
    Next G
    Let bFinish = True
End Function


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
jeudi 21 juillet 2005 à 11:51:27 | Re : Problème lenteur

Warning

Administrateur CodeS-SourceS
Je crois que tu confond rapidité d'execution et rapidité de reprise en main. En effet, si ta fonction doit s'executer par exemple 300fois, qu'elle soit longue ou pas,si tu utilise un doevents le programme mettra plus de temps a executer la fonction 300 fois bien que tu es la main sur l'application.

Warning
Admin Codes-Sources.com
http://www.decompiler-vb.net/



Cette discussion est classée dans : date, nombre, mysql, valeur, dominant


Répondre à ce message

Sujets en rapport avec ce message

validation de la date [ par jean ] bonjour,c une application qui consiste à calculer le nombre d'heure passées dans un parking. le Parking est ouvert de 6.00 am à 22h00 . la date de dép Calculer le nombre de jours entre 2 dates [ par Billy ] Bonjour j aimerais avoir un exemple d'un codage pour calculer le nombre de jours restant entre la date d'aujourd'hui et une autre date. Insertion d'une date dans une table [ par pierre751 ] BonjourMon pb est le suivant : Dans 1 formulaire Access Je récupère la valeur d'une zone de texte qui est une date (jj/mm/aa) lorsque j'essaye d'inser DATE????? [ par javi ] Bonjour,je désire faire une soustraction entre 2 date...exemple:a= 01/11/2001 (date system)b= 01/12/2001 (date introdiute par l'utilisateur)j'aimerais Nombre de jour entre 2 Date !!! [ par Sylvain ] Comment peux on calculer le nombre de jour qu'il y a entre 2 date :Exemple :19/08/99 - 19/07/88 = ?Merci d'avance Calculer le nombre de jours feries entre deux date [ par celesdane ] Salut à tousje voudrais calculer le nombre de jours feries entre deux sur VBA.merci d'avance Conversion d'un nombre en date(jj:mm:aa). Aidez moi SVP. [ par aamanguie ] Ma préocupation est la suivante. J'ai ue table (Matable)avec le champ date exprimé en nombre de jours calendair càd 35 (jour de l'an 2001) représente Convertion d'un champ date en valeur null en asp [ par Nike43 ] Les champs dates de Acces ne pouvant comporter une chaîne vide, j'obtiens une erreur de type lors d'un insertion à partir de ma page en asp.Comment pu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales