Optimisation de grosses boucles... [VB .NET] - VB/VBA/VBS - Programmation
Marsh Posté le 27-01-2004 à 15:26:25
ben :
utiliser C# et optimiser avec les pointeurs..
(PS: salut corbier )
Marsh Posté le 27-01-2004 à 15:29:09
>Taz je parcours tous les éléments de ma table de hachage avec un for each et je teste à chaque fois la valeur... Avec les clés ce serait sûrement plus rapide, mais ds mon cas, c pas possible
>Mr yvele salut à toi et pas de C#, mon Visual Studio contient que VB .NET
Marsh Posté le 28-01-2004 à 16:52:28
Juste comme ça, questions idiotes, mais on sait jamais :
1) Le type string en .NET est limité à combien ? Le document entier ne tient pas dans une seule chaîne ? (plutôt que lire ligne par ligne ce qui me semble être source de lenteur pour un fichier relativement petit - en dessous de 2 Mo, de toute façon le fichier est intégralement chargé en cache, donc autant le lire d'un coup)
2) La méthode .inStr() ou je sais plus quoi. Ca donne quoi comme perfs sur une chaîne de grande taille ? Etant une fonction de la lib de base, je pencherais pour des perfs "remarquables".
Ainsi, sans passer par un algo complexe, tu devrais avoir avec ça une solution simple pour tester rapidement...
Sinon, t'as essayé de charger ton document dans un tableau trié par ordre alphabétique ? Un peu plus long à l'initialisation, mais ensuite tu ne parcours qu'une seule fois chacun des deux tableaux en //, et tu n'as plus à traîter de grandes chaînes, juste à comparer l'égalité entre des chaînes de même longueur... Je pense que ça devrait te permettre d'obtenir d'excellentes perfs, y compris sur des dicos de 500 000 mots et des fichiers de 2 000 000 de mots. (moins de 10 minutes pour de tels fichiers en tout cas...)
Le seul souci de cette méthode, c'est que pour de gros fichiers (plus de 10 Mo) il faut le découper en petits tableau et les charger en plusieurs fois, sinon tu vas saturer la mémoire à vitesse grand V.
Marsh Posté le 27-01-2004 à 15:19:10
Bonjours à tous !
Alors là je suis un peu perdu... Voici mon problème :
J'ai une application VB .NET qui doit parcourir l'ensemble d'un dictionnaire stocké dans une base de données Access.
Bon tout va bien lorsque ce dico comporte 200-300 termes. Mais lorsque ça dépasse les 1000 arrrrrgggg !
Explications :
- Mon application lit un document ligne par ligne.
- Vient alors une boucle parcourant un tableau contenant la BD ds sa totalité (chargée dans ce tableau au préalable...).
- A chaque passage ds la boucle, une fonction teste si le terme du dico en cours est présent dans la ligne du document actuellement testée et ainsi de suite...
Un document peut contenir 10000 voire 20000 enregistrements et le dico peut aussi dépasser les 10000 enregistrements.
J'ai essayé avec une hashtable, mais ce n'est pas vraiment plus rapide...
A titre indicatif, avec un document de 3000 enregistrements et un dico de 10000 enregistrements, ça prend 10min...
Si vous avez des id qui me permettraient d'optimiser ça, merci bcp... En espérant que cela ne remette pas toute mon architecture en cause
---------------
Sans ma barbe, quelle barbe !