Accueil > Forum > > > > Accès lent à une collection pour les Items de fin
Accès lent à une collection pour les Items de fin
jeudi 24 mai 2007 à 18:29:40 |
Accès lent à une collection pour les Items de fin

violent_ken
|
Violent Ken Salut, à tous ;) J'ai un petit problème : l'accès aux objets d'une collection est très lent pour les objets dont l'index est élevé... Exemple : code 1, on accède à 30000 objets, 1000 fois les 30 premiers Le temps d'accès est très rapide (phase de récupération avec .Item) Private Sub Command1_Click() Dim o As Collection Dim x As Long Dim y As Long Dim k As Object Set o = New Collection Debug.Print "adding..." For x = 1 To 30000 o.Add k Next x Debug.Print "retrieving..." For x = 1 To 30 For y = 1 To 1000 Set k = o.Item(x) Next y Next x Debug.Print "done" Set k = Nothing Set o = Nothing
End Sub | | By Renfield |
Exemple : code 2, on accède à 30000 objets, mais cette fois les 30000 de la collection ==> TRES lent... Private Sub Command1_Click() Dim o As Collection Dim x As Long Dim y As Long Dim k As Object Set o = New Collection Debug.Print "adding..." For x = 1 To 30000 o.Add k Next x Debug.Print "retrieving..." For x = 1 To 30000 'For y = 1 To 1000 Set k = o.Item(x) 'Next y Next x Debug.Print "done" Set k = Nothing Set o = Nothing
End Sub | | By Renfield |
Une idée pour remédier à çà ?? Merci, @+ Hex Editor VB
|
|
jeudi 24 mai 2007 à 18:38:02 |
Re : Accès lent à une collection pour les Items de fin

mortalino
|
Salut, peut-être en faisant une classe objet, en implémentant For Each aux objets : Tuto de ShareVBEt si tu veux un exemple simple d'utilisation, je l'utilise (bien que pas beaucoup d'objets) dans ma source pour le suivi des actions. Indice : regarde le membre caché d'une collection dans l'explorateur d'objet : _NewEnum@++
|
|
jeudi 24 mai 2007 à 18:42:35 |
Re : Accès lent à une collection pour les Items de fin
|
jeudi 24 mai 2007 à 19:00:10 |
Re : Accès lent à une collection pour les Items de fin

DARKSIDIOUS
|
Réponse acceptée !
normal, la collection est bien connue pour être lente dès que le nombre d'objet devient important (je me demande comment c'est implémenté, mais c'est sûrement une liste chaînée). La solution ? Pourquoi ne pas essayé d'éclater ta collection en 10 ou 100 : l'accès aux objets pourrait être bien plus rapide je pense.
|
|
jeudi 24 mai 2007 à 19:02:18 |
Re : Accès lent à une collection pour les Items de fin

mortalino
|
J'ai du mal à comprendre, comment tu fais ici : Set o = New Collection Debug.Print "adding..." For x = 1 To 30000 o.Add k ' là tu ajoutes k, alors qu'il n'est instancié dans l'autre boucle Next x Debug.Print "retrieving..."
For x = 1 To 30000 'For y = 1 To 1000 Set k = o.Item(x) 'Next y Next x Debug.Print "done"@++
|
|
jeudi 24 mai 2007 à 19:07:25 |
Re : Accès lent à une collection pour les Items de fin

violent_ken
|
Violent Ken Merci pour l'info sur la lenteur de la collection. Pour l'éclatement de la collection, sûr que c'est une solution, mais çà me semble difficile à mettre en oeuvre. Sachant que je code une sorte de ListView, avec l'objet vkListItem et l'objet collection vkListItems. C'est pour çà que je vois pas trop comment je pourrais subdiviser la ListItems en plusieurs collections ? Mortalino ==> pas besoin d'instancier, c'est à Nothing par défaut. Alors j'affecte un objet vide, mais peu importe, c'est la récupération qui m'intéresse dans cet exemple. Note : Private Sub Command1_Click() Dim obj As Object MsgBox (obj Is Nothing) End Sub | | By Renfield |
@+ Hex Editor VB
|
|
vendredi 25 mai 2007 à 08:46:19 |
Re : Accès lent à une collection pour les Items de fin

Renfield
|
Tu pourrais utiliser un simple tableau pour stocker tes objets...
en désactivant les controles sur les tableaux (options de compilation) ca devrait le faire...
la chose étant que le .Item des collection est lent... il doit regarder ce que tu transmet (clé ou index) et faire la recherche en interne... j'ignore la structure de la chose, reste que c'est connu comme étant lent.
Renfield Admin CodeS-SourceS- MVP Visual Basic
|
|
vendredi 25 mai 2007 à 12:02:06 |
Re : Accès lent à une collection pour les Items de fin

violent_ken
|
Violent Ken Salut Renfield ! En fait j'utilise déjà des tableaux (notamment pour les propriétés Checked et Selected de mon objet), mais le problème est l'insertion d'un Item avec un index différent du nombre total d'items (en gros, si je veux pouvoir ajouter un item au millieu, je dois reclasser tout le tableau). Avec un collection (donc sûrement une liste chaînée), il n'y avait pas le problème. Je vais voir ce soir, merci pour l'info en tout cas. @+ Hex Editor VB
|
|
vendredi 25 mai 2007 à 13:17:01 |
Re : Accès lent à une collection pour les Items de fin

violent_ken
|
Violent Ken Re, en fait j'ai eu une idée mais je ne sais pas si c'est réalisable : serait-il possible de pouvoir déplacer les Items d'un tableau sans passer par des boucles For, mais plutôt par l'instruction CopyMemory ? (on décale des bytes en mémoire et on peut après insérer le nouvel Item au milieu). @+ Hex Editor VB
|
|
vendredi 25 mai 2007 à 21:46:05 |
Re : Accès lent à une collection pour les Items de fin

violent_ken
|
Violent Ken Salut tout le monde, j'ai presque réussi à trouver une parade : je passe par une liste et un copymemory pour pouvoir éviter de faire des For pour le décalage (quand on ajoute un Item au milieu de la liste). Seul problème, je n'arrive pas à trouver une erreur dans mon code :( Elle se situe dans la sub RemoveItem, mais j'ai beau avoir cherché pendant 1h, j'ai pas trouvé... Est-ce que quelqu'un manie avec facilité les CopyMemory et pourrait m'aider à fixer ce léger bug ? (pour voir le bug, ajouter des items à index=2, puis enlever des items à index=2, un "décalage" apparait) Merci d'avance, @+ Petit code qui plante : [ Lien ]Hex Editor VB
|
|
Cette discussion est classée dans : set, debug, for, collection, print
Répondre à ce message
Sujets en rapport avec ce message
URGENT : changement d'imprimante depuis VB :°-( [ par I need your help ! ]
Bonjour à tous,Voici ma question : comment changer l'imprimante par défaut depuis un programme VB ? :-)En créant manuellement une imprimante "Virtua
Retour de COLLECTION=====HELP [ par Alcoolhozor ]
'alut...Voilà comment je rempli ma collection...FIND_PERM()set NewPermissions = new permissiondim Newcoll as collectionWhile (Not Recordset.EOF) '# on
FICHIER SEQUENTIEL [ par alain ]
Bonjour,Je réalise un carnet de contacts, j'aimerais pouvoir effectuer une recherche par nom (en utilisant input box) et afficher avec msgbox le résul
vb fusille mon .txt o lieu de bosser sagement dessus!!! [ par stidjeanmoulin ]
mojn problem est le suivant:je travaille sur un doc texteg une form ki s'appelle SuprimerDesColonnesdessus ya deux textbox tnomdufichier et tnomdufich
Suppression de données dans un fichier!!!!!!!!!!!!!!! [ par waimea64 ]
HIbonjour, j'utilise une application qui enregistre des itemps dans des fichiers séquentielle selon le fonctionnement suivant: Open fichier For Out
Gros problème avec set Item dans Collection [ par fio ]
Bonjour,J'ai un gros problème avec ma collection, pour laquelle j'ai défini :Public Function Item(Mot As Variant) As clsMots On Error Resume Next
Écriture/lecture de fichiers INI [ par daniellapointe01 ]
Bonjour.J'utilise l'écriture et la lecture dans les fichiers INI.J'ai un fichier 02.ini qui enregistre les options choisies à partir de checkbox. Je v
lecture des donnéés dans un champ ole d'une base access [ par Romouts ]
Salut,Mon probléme est que j'ai des données dans un champ OLE dont j'ai défini le type mais je ne sais pas les dispatcher dans chacune des variables.
Objet : suppression d'objet [ par arc59 ]
J'aimerai m'assurer d'une chose. Lorsque j'execute la commande Set VGO_GAMME = Nothingje voudrai savoir si le destructeur est réélement executé car lo
Livres en rapport
|
Derniers Blogs
PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc [HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio 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
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
|