Bonjour,
Je dois remplir un flexgrid à partir de données présentes dans un fichier
texte avec séparateur.
Le problème, c'est que le fichier à charger peut être assez gros (maximum
10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
Pour remplir le tableau j'utilise cette fonction qui marche très bien mais
qui rame quand même pas mal :
J'ai fait des essais toujours avec la même fonction à peine modifiée avec
autre contrôle (vbalgrid de VBAccelerator) et les temps de chargement sont
encore pire ! Comme quoi le temps de chargement ne dépend pas que de notre
code.
Pourtant, je vois des applications qui chargent 2000 lignes dans ce type
contrôle en un clin d'oeil. Mais comment font-il ? ;-) Je doute que ce
en VB où alors je ne sais pas m'y prendre et il existe une astuce ou une
autre façon de faire ?
Bonjour,
Je dois remplir un flexgrid à partir de données présentes dans un fichier
texte avec séparateur.
Le problème, c'est que le fichier à charger peut être assez gros (maximum
10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
Pour remplir le tableau j'utilise cette fonction qui marche très bien mais
qui rame quand même pas mal :
J'ai fait des essais toujours avec la même fonction à peine modifiée avec
autre contrôle (vbalgrid de VBAccelerator) et les temps de chargement sont
encore pire ! Comme quoi le temps de chargement ne dépend pas que de notre
code.
Pourtant, je vois des applications qui chargent 2000 lignes dans ce type
contrôle en un clin d'oeil. Mais comment font-il ? ;-) Je doute que ce
en VB où alors je ne sais pas m'y prendre et il existe une astuce ou une
autre façon de faire ?
Bonjour,
Je dois remplir un flexgrid à partir de données présentes dans un fichier
texte avec séparateur.
Le problème, c'est que le fichier à charger peut être assez gros (maximum
10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
Pour remplir le tableau j'utilise cette fonction qui marche très bien mais
qui rame quand même pas mal :
J'ai fait des essais toujours avec la même fonction à peine modifiée avec
autre contrôle (vbalgrid de VBAccelerator) et les temps de chargement sont
encore pire ! Comme quoi le temps de chargement ne dépend pas que de notre
code.
Pourtant, je vois des applications qui chargent 2000 lignes dans ce type
contrôle en un clin d'oeil. Mais comment font-il ? ;-) Je doute que ce
en VB où alors je ne sais pas m'y prendre et il existe une astuce ou une
autre façon de faire ?
Bonjour,
Je dois remplir un flexgrid à partir de données présentes dans un fichier
texte avec séparateur.
Le problème, c'est que le fichier à charger peut être assez gros (maximum
10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
Pour remplir le tableau j'utilise cette fonction qui marche très bien mais
qui rame quand même pas mal :
J'ai fait des essais toujours avec la même fonction à peine modifiée avec
autre contrôle (vbalgrid de VBAccelerator) et les temps de chargement sont
encore pire ! Comme quoi le temps de chargement ne dépend pas que de notre
code.
Pourtant, je vois des applications qui chargent 2000 lignes dans ce type
contrôle en un clin d'oeil. Mais comment font-il ? ;-) Je doute que ce
en VB où alors je ne sais pas m'y prendre et il existe une astuce ou une
autre façon de faire ?
Bonjour,
Je dois remplir un flexgrid à partir de données présentes dans un fichier
texte avec séparateur.
Le problème, c'est que le fichier à charger peut être assez gros (maximum
10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
Pour remplir le tableau j'utilise cette fonction qui marche très bien mais
qui rame quand même pas mal :
J'ai fait des essais toujours avec la même fonction à peine modifiée avec
autre contrôle (vbalgrid de VBAccelerator) et les temps de chargement sont
encore pire ! Comme quoi le temps de chargement ne dépend pas que de notre
code.
Pourtant, je vois des applications qui chargent 2000 lignes dans ce type
contrôle en un clin d'oeil. Mais comment font-il ? ;-) Je doute que ce
en VB où alors je ne sais pas m'y prendre et il existe une astuce ou une
autre façon de faire ?
Bonjour,
Je dois remplir un flexgrid à partir de données présentes dans un fichier
texte avec séparateur.
Le problème, c'est que le fichier à charger peut être assez gros (maximum
10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
Pour remplir le tableau j'utilise cette fonction qui marche très bien mais
qui rame quand même pas mal :
J'ai fait des essais toujours avec la même fonction à peine modifiée avec
autre contrôle (vbalgrid de VBAccelerator) et les temps de chargement sont
encore pire ! Comme quoi le temps de chargement ne dépend pas que de notre
code.
Pourtant, je vois des applications qui chargent 2000 lignes dans ce type
contrôle en un clin d'oeil. Mais comment font-il ? ;-) Je doute que ce
en VB où alors je ne sais pas m'y prendre et il existe une astuce ou une
autre façon de faire ?
"F. David" a écrit dans le message de
news:
Je dois remplir un flexgrid à partir de données présentes dans un
fichier
texte avec séparateur.
Le problème, c'est que le fichier à charger peut être assez gros
(maximum 10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
Pour remplir le tableau j'utilise cette fonction qui marche très
bien mais qui rame quand même pas mal :
il y a des solutions, mais cela va dépendre de différents paramètres.
Peux tu donner quelques précisions et notamment ceci:
- Combien de lignes environ dans ton fichier de 10 Mo ?
- Combien de champs par ligne ? (combien de séparateurs environ)
Une fois ceci connu, il sera plus facile de proposer une solution.
Enfin, les pistes évidentes:
Il serait très utile de mesurer le temps, sur un même gros fichier:
- en faisant le découpage mais SANS insérer dans le Flexgrid
- en faisant le découpage ET en insérerant dans le Flexgrid
Ca permettra d'identifier l'endroit ou le temps est consommé.
On pourra alors essayer différentes choses:
- faire l'insertion avec le flexgrid disable
- faire l'insertion avec le flexgrid visibleúlse
- tenter une lecture du fichier en un ou plusieurs
appels en binaire et non plus ligne par ligne
- etc...
Ca va dépendre des infos complémentaires que tu pourras donner.
"F. David" <franck.dh@alussinan.org> a écrit dans le message de
news:eLlsQ4FLFHA.2136@TK2MSFTNGP14.phx.gbl...
Je dois remplir un flexgrid à partir de données présentes dans un
fichier
texte avec séparateur.
Le problème, c'est que le fichier à charger peut être assez gros
(maximum 10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
Pour remplir le tableau j'utilise cette fonction qui marche très
bien mais qui rame quand même pas mal :
il y a des solutions, mais cela va dépendre de différents paramètres.
Peux tu donner quelques précisions et notamment ceci:
- Combien de lignes environ dans ton fichier de 10 Mo ?
- Combien de champs par ligne ? (combien de séparateurs environ)
Une fois ceci connu, il sera plus facile de proposer une solution.
Enfin, les pistes évidentes:
Il serait très utile de mesurer le temps, sur un même gros fichier:
- en faisant le découpage mais SANS insérer dans le Flexgrid
- en faisant le découpage ET en insérerant dans le Flexgrid
Ca permettra d'identifier l'endroit ou le temps est consommé.
On pourra alors essayer différentes choses:
- faire l'insertion avec le flexgrid disable
- faire l'insertion avec le flexgrid visibleúlse
- tenter une lecture du fichier en un ou plusieurs
appels en binaire et non plus ligne par ligne
- etc...
Ca va dépendre des infos complémentaires que tu pourras donner.
"F. David" a écrit dans le message de
news:
Je dois remplir un flexgrid à partir de données présentes dans un
fichier
texte avec séparateur.
Le problème, c'est que le fichier à charger peut être assez gros
(maximum 10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
Pour remplir le tableau j'utilise cette fonction qui marche très
bien mais qui rame quand même pas mal :
il y a des solutions, mais cela va dépendre de différents paramètres.
Peux tu donner quelques précisions et notamment ceci:
- Combien de lignes environ dans ton fichier de 10 Mo ?
- Combien de champs par ligne ? (combien de séparateurs environ)
Une fois ceci connu, il sera plus facile de proposer une solution.
Enfin, les pistes évidentes:
Il serait très utile de mesurer le temps, sur un même gros fichier:
- en faisant le découpage mais SANS insérer dans le Flexgrid
- en faisant le découpage ET en insérerant dans le Flexgrid
Ca permettra d'identifier l'endroit ou le temps est consommé.
On pourra alors essayer différentes choses:
- faire l'insertion avec le flexgrid disable
- faire l'insertion avec le flexgrid visibleúlse
- tenter une lecture du fichier en un ou plusieurs
appels en binaire et non plus ligne par ligne
- etc...
Ca va dépendre des infos complémentaires que tu pourras donner.
Jean-Marc wrote:
> "F. David" a écrit dans le message de
> news:
>> Je dois remplir un flexgrid à partir de données présentes dans un
>> fichier
>> texte avec séparateur.
>> Le problème, c'est que le fichier à charger peut être assez gros
>> (maximum 10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
>> Pour remplir le tableau j'utilise cette fonction qui marche très
>> bien mais qui rame quand même pas mal :
> il y a des solutions, mais cela va dépendre de différents paramètres.
Bonjour et merci pour le coup de main si rapide.:-)
> Peux tu donner quelques précisions et notamment ceci:
> - Combien de lignes environ dans ton fichier de 10 Mo ?
> - Combien de champs par ligne ? (combien de séparateurs environ)
Pour l'instant, je me base juste sur un fichier de 6Mo qui fait 2256
avec 5 séparateurs par ligne et donc 6 champs.
J'aimerais qu'un fichier puisse accueillir au maximum 5000 lignes ce qui
nous ferait un poids dans les 10 même plutôt 12 -13 Mo.
> Une fois ceci connu, il sera plus facile de proposer une solution.
>
> Enfin, les pistes évidentes:
> Il serait très utile de mesurer le temps, sur un même gros fichier:
> - en faisant le découpage mais SANS insérer dans le Flexgrid
> - en faisant le découpage ET en insérerant dans le Flexgrid
Donc j'ai fait le test pour ce fichier de 2256 lignes.
J'ai juste mis un timeGetTime() en début (d) et en fin (f) de code.
SANS : f-d = 1406
AVEC : f-d = 9422
> Ca permettra d'identifier l'endroit ou le temps est consommé.
> On pourra alors essayer différentes choses:
> - faire l'insertion avec le flexgrid disable
> - faire l'insertion avec le flexgrid visibleúlse
> - tenter une lecture du fichier en un ou plusieurs
> appels en binaire et non plus ligne par ligne
> - etc...
>
> Ca va dépendre des infos complémentaires que tu pourras donner.
J'ai déjà essayé la solution de masquer la grille avant et de la
après : pas de changement notoire. Idem avec la propriété enabled à false
puis à true avant et après l'insertion.
Ensuite, pour les appels multiples en binaire, je veux bien essayer mais
ne sais pas faire ...
Merci pour tout aide.
--
Franck
Jean-Marc wrote:
> "F. David" <franck.dh@alussinan.org> a écrit dans le message de
> news:eLlsQ4FLFHA.2136@TK2MSFTNGP14.phx.gbl...
>> Je dois remplir un flexgrid à partir de données présentes dans un
>> fichier
>> texte avec séparateur.
>> Le problème, c'est que le fichier à charger peut être assez gros
>> (maximum 10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
>> Pour remplir le tableau j'utilise cette fonction qui marche très
>> bien mais qui rame quand même pas mal :
> il y a des solutions, mais cela va dépendre de différents paramètres.
Bonjour et merci pour le coup de main si rapide.:-)
> Peux tu donner quelques précisions et notamment ceci:
> - Combien de lignes environ dans ton fichier de 10 Mo ?
> - Combien de champs par ligne ? (combien de séparateurs environ)
Pour l'instant, je me base juste sur un fichier de 6Mo qui fait 2256
avec 5 séparateurs par ligne et donc 6 champs.
J'aimerais qu'un fichier puisse accueillir au maximum 5000 lignes ce qui
nous ferait un poids dans les 10 même plutôt 12 -13 Mo.
> Une fois ceci connu, il sera plus facile de proposer une solution.
>
> Enfin, les pistes évidentes:
> Il serait très utile de mesurer le temps, sur un même gros fichier:
> - en faisant le découpage mais SANS insérer dans le Flexgrid
> - en faisant le découpage ET en insérerant dans le Flexgrid
Donc j'ai fait le test pour ce fichier de 2256 lignes.
J'ai juste mis un timeGetTime() en début (d) et en fin (f) de code.
SANS : f-d = 1406
AVEC : f-d = 9422
> Ca permettra d'identifier l'endroit ou le temps est consommé.
> On pourra alors essayer différentes choses:
> - faire l'insertion avec le flexgrid disable
> - faire l'insertion avec le flexgrid visibleúlse
> - tenter une lecture du fichier en un ou plusieurs
> appels en binaire et non plus ligne par ligne
> - etc...
>
> Ca va dépendre des infos complémentaires que tu pourras donner.
J'ai déjà essayé la solution de masquer la grille avant et de la
après : pas de changement notoire. Idem avec la propriété enabled à false
puis à true avant et après l'insertion.
Ensuite, pour les appels multiples en binaire, je veux bien essayer mais
ne sais pas faire ...
Merci pour tout aide.
--
Franck
Jean-Marc wrote:
> "F. David" a écrit dans le message de
> news:
>> Je dois remplir un flexgrid à partir de données présentes dans un
>> fichier
>> texte avec séparateur.
>> Le problème, c'est que le fichier à charger peut être assez gros
>> (maximum 10Mo) et le chargement prend un temps fou : 12s pour 6 Mo
>> Pour remplir le tableau j'utilise cette fonction qui marche très
>> bien mais qui rame quand même pas mal :
> il y a des solutions, mais cela va dépendre de différents paramètres.
Bonjour et merci pour le coup de main si rapide.:-)
> Peux tu donner quelques précisions et notamment ceci:
> - Combien de lignes environ dans ton fichier de 10 Mo ?
> - Combien de champs par ligne ? (combien de séparateurs environ)
Pour l'instant, je me base juste sur un fichier de 6Mo qui fait 2256
avec 5 séparateurs par ligne et donc 6 champs.
J'aimerais qu'un fichier puisse accueillir au maximum 5000 lignes ce qui
nous ferait un poids dans les 10 même plutôt 12 -13 Mo.
> Une fois ceci connu, il sera plus facile de proposer une solution.
>
> Enfin, les pistes évidentes:
> Il serait très utile de mesurer le temps, sur un même gros fichier:
> - en faisant le découpage mais SANS insérer dans le Flexgrid
> - en faisant le découpage ET en insérerant dans le Flexgrid
Donc j'ai fait le test pour ce fichier de 2256 lignes.
J'ai juste mis un timeGetTime() en début (d) et en fin (f) de code.
SANS : f-d = 1406
AVEC : f-d = 9422
> Ca permettra d'identifier l'endroit ou le temps est consommé.
> On pourra alors essayer différentes choses:
> - faire l'insertion avec le flexgrid disable
> - faire l'insertion avec le flexgrid visibleúlse
> - tenter une lecture du fichier en un ou plusieurs
> appels en binaire et non plus ligne par ligne
> - etc...
>
> Ca va dépendre des infos complémentaires que tu pourras donner.
J'ai déjà essayé la solution de masquer la grille avant et de la
après : pas de changement notoire. Idem avec la propriété enabled à false
puis à true avant et après l'insertion.
Ensuite, pour les appels multiples en binaire, je veux bien essayer mais
ne sais pas faire ...
Merci pour tout aide.
--
Franck
Re hello,
ok, j'ai fait des tests avec un fichier de 5000 lignes, 7 champs
Resultats:
Conclusion: tout le temps est consommé dans
mshfg.Rows = mshfg.Rows + 1
Re hello,
ok, j'ai fait des tests avec un fichier de 5000 lignes, 7 champs
Resultats:
Conclusion: tout le temps est consommé dans
mshfg.Rows = mshfg.Rows + 1
Re hello,
ok, j'ai fait des tests avec un fichier de 5000 lignes, 7 champs
Resultats:
Conclusion: tout le temps est consommé dans
mshfg.Rows = mshfg.Rows + 1
J'ai regardé aussi le code que tu donnes en exemple dans
le lien.
Même si ca ne suffit pas, il peut être amélioré ne serait
ce qu'en sortant de la boucle while le test qui vérifie
le nombre de colonnes. En effet, si tu connais ton format
d'entrée et que toutes les lignes ont le même nombre de
champs,
il est plus malin de faire l'init une seule fois au début
en comptant le nombre de champs dans la première lignes
que de retester à chaque fois dans le corps de la boucle.
De même, l'incrémentation du nombre de lignes peut être
fait à moindre cout et en évitant un test systématique, juste
en arrangeant un peux mieux le code sans en changer le principe.
Bref, il y a plein de temps à gagner, à droite ou à gauche.
Bien sur, tout cela n'a de sens que si on identifie d'abord les
endroits ou il faut *vraiment* gagner du temps:
Si on passe 10% du temps à découper et 90% du temps à insérer
dans le flexgrid, il est un peu bête de vouloir optimiser le
découpage.
J'ai regardé aussi le code que tu donnes en exemple dans
le lien.
Même si ca ne suffit pas, il peut être amélioré ne serait
ce qu'en sortant de la boucle while le test qui vérifie
le nombre de colonnes. En effet, si tu connais ton format
d'entrée et que toutes les lignes ont le même nombre de
champs,
il est plus malin de faire l'init une seule fois au début
en comptant le nombre de champs dans la première lignes
que de retester à chaque fois dans le corps de la boucle.
De même, l'incrémentation du nombre de lignes peut être
fait à moindre cout et en évitant un test systématique, juste
en arrangeant un peux mieux le code sans en changer le principe.
Bref, il y a plein de temps à gagner, à droite ou à gauche.
Bien sur, tout cela n'a de sens que si on identifie d'abord les
endroits ou il faut *vraiment* gagner du temps:
Si on passe 10% du temps à découper et 90% du temps à insérer
dans le flexgrid, il est un peu bête de vouloir optimiser le
découpage.
J'ai regardé aussi le code que tu donnes en exemple dans
le lien.
Même si ca ne suffit pas, il peut être amélioré ne serait
ce qu'en sortant de la boucle while le test qui vérifie
le nombre de colonnes. En effet, si tu connais ton format
d'entrée et que toutes les lignes ont le même nombre de
champs,
il est plus malin de faire l'init une seule fois au début
en comptant le nombre de champs dans la première lignes
que de retester à chaque fois dans le corps de la boucle.
De même, l'incrémentation du nombre de lignes peut être
fait à moindre cout et en évitant un test systématique, juste
en arrangeant un peux mieux le code sans en changer le principe.
Bref, il y a plein de temps à gagner, à droite ou à gauche.
Bien sur, tout cela n'a de sens que si on identifie d'abord les
endroits ou il faut *vraiment* gagner du temps:
Si on passe 10% du temps à découper et 90% du temps à insérer
dans le flexgrid, il est un peu bête de vouloir optimiser le
découpage.
"Jean-Marc" a écrit dans le message
de news:423bf222$0$20667$Re hello,
ok, j'ai fait des tests avec un fichier de 5000 lignes, 7 champs
Resultats:
Conclusion: tout le temps est consommé dans
mshfg.Rows = mshfg.Rows + 1
Re coucou,
Du coup, ayant identifié la nature du problème,
il ne restait qu'à le résoudre.
Très simple:
- on compte le nombre de lignes
- on prédimensionne le flexgrid
- on remplit tranquillemnt
***********************************************
Resultat = > les 5000 lignes en 0,7 secondes !
Au lieu de 9 secondes initialement!
***********************************************
"Jean-Marc" <webmaster@planetejm.atspace.com> a écrit dans le message
de news:423bf222$0$20667$ba620e4c@news.skynet.be...
Re hello,
ok, j'ai fait des tests avec un fichier de 5000 lignes, 7 champs
Resultats:
Conclusion: tout le temps est consommé dans
mshfg.Rows = mshfg.Rows + 1
Re coucou,
Du coup, ayant identifié la nature du problème,
il ne restait qu'à le résoudre.
Très simple:
- on compte le nombre de lignes
- on prédimensionne le flexgrid
- on remplit tranquillemnt
***********************************************
Resultat = > les 5000 lignes en 0,7 secondes !
Au lieu de 9 secondes initialement!
***********************************************
"Jean-Marc" a écrit dans le message
de news:423bf222$0$20667$Re hello,
ok, j'ai fait des tests avec un fichier de 5000 lignes, 7 champs
Resultats:
Conclusion: tout le temps est consommé dans
mshfg.Rows = mshfg.Rows + 1
Re coucou,
Du coup, ayant identifié la nature du problème,
il ne restait qu'à le résoudre.
Très simple:
- on compte le nombre de lignes
- on prédimensionne le flexgrid
- on remplit tranquillemnt
***********************************************
Resultat = > les 5000 lignes en 0,7 secondes !
Au lieu de 9 secondes initialement!
***********************************************
Voici le code final avec une petite modification.
Les performance sont finalement de 0,58 contre 9
initialement.
Voici le code final avec une petite modification.
Les performance sont finalement de 0,58 contre 9
initialement.
Voici le code final avec une petite modification.
Les performance sont finalement de 0,58 contre 9
initialement.
Jean-Marc wrote:Voici le code final avec une petite modification.
Les performance sont finalement de 0,58 contre 9
initialement.
J'ai pu tester et je confirme une très nette amélioration du temps de
traitement. Ici je suis un peu au dessus (proche des deux secondes)
car je n'ai pas une machine ultra-puissante mais je dirais que ce
n'est pas plus mal car ça me permet de détecter de telles anomalies
au niveau du temps d'exécution. Donc oui, y'a pas photo, c'est le
jour et la nuit entre le code initial et celui-ci !
Jean-Marc wrote:
Voici le code final avec une petite modification.
Les performance sont finalement de 0,58 contre 9
initialement.
J'ai pu tester et je confirme une très nette amélioration du temps de
traitement. Ici je suis un peu au dessus (proche des deux secondes)
car je n'ai pas une machine ultra-puissante mais je dirais que ce
n'est pas plus mal car ça me permet de détecter de telles anomalies
au niveau du temps d'exécution. Donc oui, y'a pas photo, c'est le
jour et la nuit entre le code initial et celui-ci !
Jean-Marc wrote:Voici le code final avec une petite modification.
Les performance sont finalement de 0,58 contre 9
initialement.
J'ai pu tester et je confirme une très nette amélioration du temps de
traitement. Ici je suis un peu au dessus (proche des deux secondes)
car je n'ai pas une machine ultra-puissante mais je dirais que ce
n'est pas plus mal car ça me permet de détecter de telles anomalies
au niveau du temps d'exécution. Donc oui, y'a pas photo, c'est le
jour et la nuit entre le code initial et celui-ci !