Livermore
Messages postés7Date d'inscriptionjeudi 28 juillet 2005StatutMembreDernière intervention23 août 2005
-
28 juil. 2005 à 14:55
Livermore
Messages postés7Date d'inscriptionjeudi 28 juillet 2005StatutMembreDernière intervention23 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....
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 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/
Livermore
Messages postés7Date d'inscriptionjeudi 28 juillet 2005StatutMembreDernière intervention23 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)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 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/
Livermore
Messages postés7Date d'inscriptionjeudi 28 juillet 2005StatutMembreDernière intervention23 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...