FSO ou "open for ..." ??

Résolu
DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007 - 7 sept. 2004 à 11:46
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 7 sept. 2004 à 17:58
Bonjour
Hier, j'ai continué un de mes progs en cours, et il doit écrire dans un fichier.
Je fais donc ouvrir un fichier(7Mo environ, j'utilise "open... for input..." "line input..."), je traite la ligne récupéré et je l'écris avec print dans un autre fichier(30Mo à la fin, j'utilise "open.. for output..." "print ...").
Mon programme fonctionne, mais:

temps = 31 minutes (il y a pas mal de traitement remarque)
donc j'aurais voulu savoir si la méthode FSO étais plus rapide et quel est l'équivalent pour lire ligne par ligne avec cette méthode et aussi écrire, car je ne connais que très peu cette méthode.

Amicalement,
AigleNoir :)

10 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 sept. 2004 à 13:49
Le FSO est extrêmement lent...

http://faq.vb.free.fr/index.php?question=126
3
Fulgy Messages postés 85 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 5 octobre 2004
7 sept. 2004 à 13:02
Salut, je sais pas si le modèle fso est plus rapide (si tu fais le test tiens moi au courant ce sera toujours ça d'appris :), pour les méthode de lecture et écriture ligne par ligne, y a pas plus con: ReadLine et WriteLine, tout est expliqué dans l'aide... A+
0
DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007
7 sept. 2004 à 14:40
OK merci de ta réponse.
Je vais resté sur la bonne vielle méthode :p

par contre, lorsque j'appuis sur mon bouton pour démarrer la conversion de mon fichier,
l'application devient "instable" il y a juste la barre du haut normal, sinon tout est blanc, et j'ai beau cliqué sur stop, ca réfléchi tellement que ca réagi pas :sad)
Bien embétant.
AigleNoir ?-)
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 sept. 2004 à 14:44
Penses à placer des DoEvents dans tes boucles.

Daniel
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 sept. 2004 à 14:59
Et surtout : ne t'amuses pas a placer tout ton fichier en mémoire, lit le par blocs....

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007
7 sept. 2004 à 15:13
j'ouvre le fichier et je lit ligne par ligne, donc il n'y a qu'une ligne
en mémoire, ou bien il garde qu'a meme les lignes précédentes. dans ce cas, comment les vidés :)

voila mon code, je n'emploi pas DoEvents donc si tu pouvais me conseillé ou en placer Gobillot ;)

Close #1, #2
    Text1 = "c:\input.dat"
    FileOutPut = "c:\output.dat"
    Open Text1 For Input As #1 
    Open FileOutPut For Append As #2
    While Not EOF(1)
        If DemandeStop = True Then Exit Sub
        Line Input #1, Buffer
        Text2 = Buffer
        conversion(Text2) 'Traitement de la ligne
        Print #2, Conversion
    Wend
Close #1,#2


Merci encore pour m'aider à progresser :big)

AigleNoir :)
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 sept. 2004 à 15:38
tu places un DoEvents n'importe où dans la boucle entre While et Wend.
0
DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007
7 sept. 2004 à 16:03
Je suis assez ceptique sur ce Doevents pour le moment,
j'ai réalisé un test sur un fichier plus petit
résultat avec Doevents : 7 secondes
sans Doevents : 4 secondes :sad)

Malgré ce défault, je te remerci, le programme reste utilisable et je peut donc appuyé sur stop et ca marche :big)

Problème résolu :)

Merci beaucoup!
AigleNoir ?-)
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
7 sept. 2004 à 16:34
Mon avis :

( 1 ) Oublie FSO (c'est un objet COM)
( 2 ) Utilise Open (natif et simple a fait c peuvre depuis la premiere version du basic)
( 3 ) Pas de doevents sauf si affichage de progression
( 4 ) Serais encore plus rapide avec les API et Mapping de fichier
( 5 ) Utiliser GET et SET bien plus rapide mais GET pas tres adapter texte a longeur variable
( 6 ) Acces disque tres lent utiliser un buffer de taille assez grande pour eviter les acces (a envisager)
( 7 ) Avec la manipulation de donnée plus on s'approche du language machine plus c rapide (voir si creatin de dll en c peut etre envisagé)

@+

E.B.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 sept. 2004 à 17:58
Le DoEvents c'était pas pour améliorer la vitesse, au contraire, mais pour éviter de monopoliser toutes les ressources, afin de permettre aux autres programmes de tourner, et aussi de permettre à tes propres évênements de s'effectuer. Essayes un peu d'arrêter ton programme avec la DemandeStop, elle peut être complétement bloquée.
0
Rejoignez-nous