VB et la POO: pb de temps de mise a nothing

Signaler
Messages postés
7
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
23 août 2005
-
Messages postés
7
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
23 août 2005
-
Bonjour a tous

voila le pb:

Dim tablo As New Collection
Dim newObj As MaClasse
Dim cpt As Long
For cpt = 1 To 100000
Set newObj = New MaClasse
tablo.Add newObj
Next
MsgBox ("Loaded")

Set tablo = Nothing
MsgBox ("Deleted")

remplacez MaClasse par une de vos classe et testez.... VB crée la collection en un temps record mais pour ce qui est de la mise a nothing c'est vraiment désespérant....
Comme j'ai 1 a 10 millions d'objects dans mon appli et bien elle met plus de 2h a se fermer....


Merci d'avance pour vos remarques et vos idées.

6 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Ton problème n'est pas la remise à zéro de la collection, mais la
remise à nothing de tout les objets qu'elle contient : Il faut que VB
teste s'il existe au moins une référence à un objet avant de vraiment
le mettre à nothing pour éviter de supprimer un objet qui pourrait
servir autre part !



C'est donc ce test des références des objets de la collection qui doit être long à faire.



De plus, mettre 1 à 10 millions d'objets dans une collection n'est pas
une très bonne chose. La collection est pratique s'il y a très peu
d'objets dedans, mais dès qu'elle grossit, elle devient très lente
apparement, et il vaut mieux utiliser un tableau à la place de la
collection même si, je l'avoue, c'est bien moins pratique à utiliser !


Et puis, utiliser 1 à 10 millions d'objets, il n'y aurais pas un problème dans la conception là ?


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
Messages postés
7
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
23 août 2005

Pour info si j'utilise un tableau j'ai exactement le meme pb: VB ne sais pas mettre a nothing rapidement (et en plus c bien moins pratique)

Cote volume: pas de pb de conception, ca j'en suis sur. C'est pas une appli de petit joueur ;). Plus serieusement c'est bien fait: genre 1 collection de 1000 objects qui ont tous une collection de 2000 objects (données niveau mondial et sur des 10aines d'années)
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Hum, et pourquoi ne pas stocker ca dans une base de données plutôt que dans des objets ?


Il est toujours pratique d'utiliser des objets, mais ca reste quand même lourd dès qu'on manipule trop d'objets (la preuve !)


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
Messages postés
7
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
23 août 2005

Bon j'ai aussi une BDD mais la n'est pas le PB.

Le PB est la mise a nothing de VB.
Pourquoi ca met tant de temps ?
Pourquoi ca en met plus qu'un NEW ?

Tout les autres langages de prog sont plus rapides a faire un delete qu'un new alors pourquoi pas VB?

Merci!
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Es-tu sûr que les autres langages sont plus rapides pour faire un delete qu'un new ?



Ca peut dépendre de pas mal de chose : le destructeur, le constructeur, et puis le nombre d'instances de chaque objets.



Plus le destructeur (l'événement Class_Terminate) sera long à éxécuter,
plus la mise à Nothing de l'objet sera longue, et idem pour le
constructeur.


Ensuite, s'il existe 2 instances d'une même classe, la destruction
d'une instance doit être plus rapide en théorie que s'il n'y en a
qu'une seule (en théorie !!!).



Si c'est VB qui est lent à détruire les objets, et ce n'est pas là où
tu peux y gagner, tu subit uniquement le manque du langage, la solution
reste donc de trouver d'autres méthodes plus rapides, d'où mon idée de
base de données.


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
Messages postés
7
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
23 août 2005

Merci pour ces precisions.

En C++ un new est lourd et le delete est leger.

Pour info je n'ai aucun code dans les methodes constructeurs et destructeurs.
Cote instance... j'en fais facile 2M de la meme classe

une bdd c'est bien pour stocker mais pas pour faire du calcul en live. Je load facilement la 1/2 de ma bdd pour que mon appli tourne d'ou mon besoin d'objet en RAM.

Bon si ya pas de solution miracle je vais etre obligé de revoir mon architecture...