Accueil > Forum > > > > Ralentissement dans le chargement d'un fichier
Ralentissement dans le chargement d'un fichier
dimanche 17 février 2008 à 14:38:09 |
Ralentissement dans le chargement d'un fichier

PROGRAMMIX
|
Bonjour,
Le projet sur lequel je travailler actuellement implique le chargement d'un fichier de 134 Ko contenant 2.283 lignes de 23 à 120 caractères.
Lorsque je charge ce fichier pour l'afficher, j'observe un ralentissement du chargement au fur et à mesure.
Pourriez-vous me dire comment éviter cela ?
Ci-dessous le code utilisé :
Private Sub cmdChargerFichier_Click()
Dim numFichier As Integer Dim s1 As String Dim s2 As String Dim S As String Dim f As String Dim i As Integer Dim Param() As String Dim NbreSemaines As Integer Dim NbreLignes As Integer Dim iSemaine As Integer Dim x1 As Integer numFichier = FreeFile x1 = 1 'Ouverture du fichier source Open FichierSource For Input As #numFichier 'Ligne 1 = NbreSemaines, NbreLignes, NomEquipe, FichierModèle Line Input #numFichier, s1
Param = Split(s1, ",") NbreSemaines = CInt(Param(0)) NbreLignes = CInt(Param(1)) * 2 'Ligne 2 = Séparation des groupes Line Input #numFichier, s2 'Lecture de la suite While Not EOF(numFichier) 'Incrémente la variable iSemaine iSemaine = iSemaine + 1 'Charge les dates Line Input #numFichier, S f = f & S & vbCrLf
'Idem pour la ligne des remarques Line Input #numFichier, S f = f & S & vbCrLf 'Idem pour les lignes contenant les horaires For i = 1 To NbreLignes Line Input #numFichier, S If (i = x1) Or (i = x1 + 1) Then S = "==>" & S f = f & S & vbCrLf Next 'Rend la main à Windows Me.Label1.Caption = "Semaine " & iSemaine & "/" & NbreSemaines DoEvents Wend 'Fermeture du fichier source Close #numFichier Me.Text1.Text = s1 & vbCrLf & s2 Me.RichTextBox1.Text = f End Sub
Programmix
|
|
dimanche 17 février 2008 à 15:04:01 |
Re : Ralentissement dans le chargement d'un fichier

PCPT
|
salut, peux-tu héberger le fichier texte? ++ Prenez un instant pour répondre à ce sondage svp 
|
|
dimanche 17 février 2008 à 15:18:09 |
Re : Ralentissement dans le chargement d'un fichier
|
dimanche 17 février 2008 à 15:30:52 |
Re : Ralentissement dans le chargement d'un fichier

PROGRAMMIX
|
Le problème vient certainement de l'utilisation de la variable "f as string" qui me sert à recueillier les données.
Si je mets toutes les lignes faisant appel à cette variable, le processus s'exécute à la "vitesse de l'éclair" à tel point que je n'ai pas le temps d'observer un ralentissement.
Seulement voilà, comment utiliser au mieux cette variable ? ou quelle autre type de variable est-il préférable d'utiliser pour un tel cas de figure ?
Programmix
|
|
dimanche 17 février 2008 à 15:41:14 |
Re : Ralentissement dans le chargement d'un fichier

PCPT
|
c'est pas que c'est plus long vers la fin, c'est qu'on passe plus souvent dans ta boucle avec "==>" par contre à part justement cet ajout, j'ai du mal à comprendre l'intérêt de ce travail sur le fichier. je peux t'aider à l'optimiser un peu mais il faudrait plus d'explications (??) Prenez un instant pour répondre à ce sondage svp 
|
|
dimanche 17 février 2008 à 15:41:56 |
Re : Ralentissement dans le chargement d'un fichier

PCPT
|
tu peux utiliser un tableau qui se remplira plus vite
|
|
dimanche 17 février 2008 à 15:53:55 |
Re : Ralentissement dans le chargement d'un fichier

PROGRAMMIX
|
Ce fichier est un fichier utilisé pour gérer les horaires de 19 personnes sur une année.
Chaque paire de ligne correspond à l'horaire d'un titulaire dont le nom est repris dans la première ligne et, en cas de remplacement du titulaire par une autre personne, le nom de ce remplaçant est indiqué dans la seconde ligne.
Seulement voilà, je dois réécrire le fichier parce que l'un des titulaires ayant obtenu un mi-temps, je dois "ré-injecté" son remplaçant dans le planning en tant que "nouveau titulaire" sans pour autant augmenter le nombre de "titulaires prévus" (caractérisé par la variable "nbrelignes").
Le code présenté n'était que la première partie du projet, celle chargeant de le fichier de base qui sera modifié en fonction de ce que je viens d'expliquer (j'espère assez clairement).
Programmix
|
|
dimanche 17 février 2008 à 16:02:19 |
Re : Ralentissement dans le chargement d'un fichier

PCPT
|
bin moyen mais bon ^^ voici strictement le même code, avec un tableau çà semble plus rapide :p Option Explicit Private Const FichierSource As String = "C:\horaires2008.txt" Private Type BUFFER saArr() As String lCpt As Long End Type Dim tBuff As BUFFER
Private Sub cmdChargerFichier_Click()
'
buffer ReDim tBuff.saArr(500) tBuff.lCpt = -1 Dim FF As Integer Dim s1 As String Dim s2 As String Dim S As String Dim i As Integer Dim Param() As String Dim NbreSemaines As Integer Dim NbreLignes As Integer Dim iSemaine As Integer Dim x1 As Integer x1 = 1 FF = FreeFile 'Ouverture du fichier source Open FichierSource For Input As #FF 'Ligne 1 =
NbreSemaines, NbreLignes, NomEquipe, FichierModèle Line Input #FF, s1 Param = Split(s1, ",") NbreSemaines = CInt(Param(0)) NbreLignes = CInt(Param(1)) * 2 'Ligne 2 = Séparation des groupes Line Input #FF, s2 'Lecture de la
suite While Not EOF(FF) 'Incrémente la variable iSemaine iSemaine = iSemaine + 1 'Charge les
dates Line Input #FF, S Add S & vbCrLf
'Idem
pour la ligne des remarques Line Input #FF, S Add S & vbCrLf 'Idem pour les lignes contenant les
horaires For i = 1 To NbreLignes Line Input #FF, S If (i = x1) Or (i = x1 + 1) Then S =
"==>" & S Add S & vbCrLf Next i 'Rend la main à Windows Me.Label1.Caption = "Semaine
" & iSemaine & "/" & NbreSemaines DoEvents Wend 'Fermeture du
fichier source Close #FF Me.Text1.Text = s1 & vbCrLf & s2 ReDim Preserve tBuff.saArr(tBuff.lCpt) Me.RichTextBox1.Text = Join(tBuff.saArr)
End Sub
Private Sub Add(ByVal sVal As String) With tBuff .lCpt = .lCpt + 1 If .lCpt > UBound(.saArr) Then ReDim Preserve
.saArr(.lCpt + 500) .saArr(.lCpt) = sVal End With End Sub
(ps : de mémoire Renfield et Violent_Ken ont fait des classes de ce genre) ++ Prenez un instant pour répondre à ce sondage svp 
|
|
dimanche 17 février 2008 à 18:37:14 |
Re : Ralentissement dans le chargement d'un fichier

PROGRAMMIX
|
Merci, c'est effectivement plus rapide.
Mais histoire que je comprenne bien le fonctionnement, peux-tu vérifier mes commentaires ci-dessous ? Et éventuellement m'expliquer, à moins que ce ne soit pas explicable en "français simple", pourquoi cette méthode fonctionne mieux que l'autre ?
Je pense aussi que Renfield a déjà élaboré des classes pour gérer cela, mais, à mon grand regret, j'ai encore beaucoup de mal à saisir toutes les subtibilités d'utilisation des classes pour une optimisation du code.
'Déclaration d'un type de variable Private Type BUFFER saArr() As String 'Tableau de chaines lCpt As Long 'Index d'une chaine End Type Dim tBuff As BUFFER
'(...)
ReDim tBuff.saArr(500) ' Déclaration d'un tableau de 500 éléments tBuff.lCpt = -1 'Index de départ
'(..)
'Fonction pour ajouter une chaine dans le tableau Private Sub Add(ByVal sVal As String) With tBuff .lCpt = .lCpt + 1 'Index de la chaîne ajoutée 'Si l'index est supérieur à sa limite maximale, le tableau est redimentionné avec conservation des éléments précédents If .lCpt > UBound(.saArr) Then ReDim Preserve .saArr(.lCpt + 500) 'La chaîne est ajoutée au tableau .saArr(.lCpt) = sVal End With End Sub
Programmix
|
|
dimanche 17 février 2008 à 19:10:28 |
Re : Ralentissement dans le chargement d'un fichier

PCPT
|
Réponse acceptée !
ReDim tBuff.saArr(500) ' Déclaration d'uninitialisation/dimension de départ du tableau de 500 élémentsle reste est bon. il est plus rapide de remplir une variable que de concaténer et donc de redimensionner la taille de la variable on ne fait donc QUE du remplissage (tableau), ensuite en redimensionne à la taille exacte (d'où le compteur) et on récupère le tout concaténé une seule fois par JOIN Prenez un instant pour répondre à ce sondage svp 
|
|
Cette discussion est classée dans : fichier, input, string, integer, numfichier
Répondre à ce message
Sujets en rapport avec ce message
Gestion des fichiers ini [ par VbNicoG ]
Bonjour à tous, A l'heure actuelle, j'utilise les fonctions suivantes pour gérer mes fichiers INI : [code=vb] Private Declare Function GetPrivateProf
Fichier texte [ par xavier77 ]
Salut, J'ouvre un fichier texte et je le lie ligne par ligne : NumFichier = FreeFileOpen App.Path & "\toto.txt" For Input As #NumFichierDo While EO
string en integer et faire la somme [ par tonyock ]
voila je veux transformer ma chaine de caractere en entier et faire la somme de ces valeurs j'ai essayer convert.toint et autre fonction tjs le meme
Extraction valeur [ par quentin0594 ]
Bonjours, c'est la première fois que j'utilise le language Xml. J'ai un petit fichier très simple, : [code=xml] valeur1 valeur2 </ressourc
écriture et lecture d'un fichier en binaire [ par Taur33 ]
Bonjour à tous Voilà je voudrais précalculer les puissances de 2 jusqu'à 10000 pour accélérer ma fonction (Dectobinaire(nombre as string)as string)don
Détéction de "répertoire"[VB.net] [ par Anakin79 ]
Bonjour, Il y a 2 jour, j'ai commencer un programme. Mais voila, je rencontre un problème assez embêtant[^^mad2] Je vous explique [^^happy10] J'ai
Copie de plusieurs fichier en VB ?? [ par nico8001 ]
Bonjour, Donc je suis sur visual basic 2008 et base de données access 2000 Pour mon projet je dois copier des fichiers qui sont sur mon ordinateur
Lecture d'un fichier ligne par ligne, donne un resultat trim [ par gretata ]
[b]Bonjour a tous !![/b] J'ai un petit soucis bizarre, en VB.net je lis un fichier avec un StreamReader je fais ReadLine et je me retrouve avec ma li
suppression des doublons dans un tableau de string [ par sanaaSooma ]
Bonjour, j'ai programé une application en vb.net qui m'a permet de liare un fichier txt et de recuperer les information desiré en fichier excel ,j'ai
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|