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

Livermore Messages postés 7 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 août 2005 - 28 juil. 2005 à 14:55
Livermore Messages postés 7 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 août 2005 - 28 juil. 2005 à 18:04
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

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
28 juil. 2005 à 15:06
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/
0
Livermore Messages postés 7 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 août 2005
28 juil. 2005 à 15:58
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)
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
28 juil. 2005 à 16:17
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/
0
Livermore Messages postés 7 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 août 2005
28 juil. 2005 à 16:49
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!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
28 juil. 2005 à 16:59
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/
0
Livermore Messages postés 7 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 août 2005
28 juil. 2005 à 18:04
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...
0