michel120147
Messages postés17Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention 9 août 2006
-
25 juin 2006 à 22:57
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDerniè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
michel120147
Messages postés17Date d'inscriptionvendredi 8 octobre 2004StatutMembreDerniè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
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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é).
michel120147
Messages postés17Date d'inscriptionvendredi 8 octobre 2004StatutMembreDerniè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
Vous n’avez pas trouvé la réponse que vous recherchez ?
michel120147
Messages postés17Date d'inscriptionvendredi 8 octobre 2004StatutMembreDerniè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
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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.