Vos idées d'amélioration

michel120147 Messages postés 17 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 9 août 2006 - 25 juin 2006 à 22:57
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 27 juin 2006 à 13:53
Qui aurait une idée pour accélérer la recherche dans le fichier sachant que ce fichier a plus de 4000 lignes et que la valeur recherchée peut se trouver n'importe où

Merci a tous

    Private Sub BTaffich_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTaffich.Click
        Dim cpt As Integer = 1
        Dim i As Integer

        Windows.Forms.Cursor.Current = Cursors.WaitCursor
        If nfich = 0 Then
            MessageBox.Show("Aucune collection n'est ouverte. Dans menu : choisissez Collections >Ouvrir une collection", "ATTENTION", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            Exit Sub
        End If

        For i = 2 To indexmax
            FileGet(nfich, enreg, i)
            cpt = cpt + 1            If TXTaffich.Text Trim(enreg.num) Then indexfich cpt
        Next

        Windows.Forms.Cursor.Current = Cursors.Default
        rafraichissement()

    End Sub

8 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
25 juin 2006 à 23:23
Salut,

Peux-tu commenter plus ton code STP.

Quelle est le but?
Que fais FileGet
'Est cette fonction qui bloque ??
On ne peux pas determiné.
Mais ca doit etre le cas

Comment est calculé indexmax?

On ne peux pas repondre a des questions, si une partie ou il y a le probleme est une boite noire ?

a moins que c'est
rafraichissement la boite noire.
que fais cette fonction

Voila.
Désolé je n'ai pas de boule de cristal pour lire dans ton code ;-)
0
michel120147 Messages postés 17 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 9 août 2006
26 juin 2006 à 11:53
Ce code fonctionne bien, rien ne bloque, simplement je cherche des idées pour améliorer la rapidité.
Pour info :
indexmax est issu d'un module (nombre d'enregistrement dans le fichier)
fileget() lit dans le fichier
refraichissement est une procédure public

Merci
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
26 juin 2006 à 12:14
Déjà, tu peux remplacer

        Dim cpt As Integer = 1

        Dim i As Integer

par :

        Dim cpt As Long = 1


        Dim i As Long


Ton compilo peut préférer ça.


Ensuite, on peut difficilement t'aides sans le code de FileGet : C'est lui qui vat être executé de très nombreuses fois.


Par exemple, si tu ouvres le fichier à chaque FileGet, tu perds un
temps précieux. Windows est franchement lent pour ouvrir un fichier (Y
a nottement pas mal de vérifications côté sécurité).
0
michel120147 Messages postés 17 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 9 août 2006
27 juin 2006 à 09:30
Merci de vous interesser à mon post

Le fichier est ouvert dans une autre procédure de cette façon

FileOpen(nfich, collec, OpenMode.Random, , , lg)

collec est constitué d'enregistrement  comme ceci

    Public Structure donnee

        <VBFixedString(20)> Dim dateneuf, datechar, dateoblit As String
        <VBFixedString(100)> Dim num, grav, annee, typ, couleur, dent As String
        <VBFixedString(150)> Dim desi As String
        <VBFixedString(50)> Dim valfac, att2, qtemis As String
        <VBFixedString(250)> Dim info As String
        <VBFixedString(20)> Dim photo As String
        <VBFixedString(100)> Dim dessin, catal As String
        Dim qtneufpos, qtcharpos, qtoblitpos, index As Integer
        Dim totqtneufpos, totqtcharpos, totqtoblitpos As Integer
        Dim cotneuf, cotneufchar, cotoblit, achatneuf, achatneufchar, achatoblit As Double
        Dim totcotneuf, totcotneufchar, totcotoblit As Double
        Dim totachatneuf, totachatneufchar, totachatoblit As Double
        Dim att1, att3, att4, att5, att6 As Double
        <VBFixedString(100)> Dim text1, text2, text3, text4, text5, text6 As String

    End Structure

j'ai déja legèrement modifier le code en arrêtant la boucle des que la valeur est trouvée, mais cela ne donne un bon résultat que si la valeur recherchée n'est pas trop loin dans le fichier
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
27 juin 2006 à 10:44
Moi j'aimerais bien voir FileGet
0
michel120147 Messages postés 17 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 9 août 2006
27 juin 2006 à 13:40
Comment tu veux "voir" Fileget ?
Fileget(nfich,enreg,i) lit et récupère chaque ligne du fichier et chaque ligne est composée des éléments décrit dans la structure
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
27 juin 2006 à 13:50
Ok, mais elle est en plein dans ta boucle de recherche, non ?


Et ce n'est pas une fonction de VB6, non ?


Comment veux tu que l'on optimise si on voit pas les trois quart du code de la boucle ?


Une petite remarque d'optimisation aussi : L'appel d'une fonction prend
un certain temps. Il y a généralement sauvegarde d'une partie du
context, création d'un espace pour les variables locales. Et les
restitutions associées.


Tu peux gagner du temps en recopiant la fonction dans ta boucle for.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
27 juin 2006 à 13:53
Ah bah milles excuses, c'est effectivement une fonction de VB6.


* Vat se cacher *
0
Rejoignez-nous