1 votes

Obtenir une copie d'un objet de grande taille (160000+ arbre d'objet interne)

Ok, j'ai un ensemble de très grands arbres identiques mis en cache dans la mémoire (à peupler avec des données non identiques [ils contiennent des informations sur le contenu de chaque nœud]).

Je veux copier une seule instance de l'arbre, et remplir chaque copie avec un ensemble distinct de données.

Cependant, pour le moment, la copie "vierge" de l'arbre mise en cache n'est pas copiée, mais simplement référencée et remplie de chaque ensemble de données.

Comment puis-je forcer la méthode qui obtient l'arbre vierge en cache à retourner une copie de l'objet, au lieu d'une référence ?

2voto

Bogdan_Ch Points 2044

Une alternative à Clone() - sérialisez-le dans le flux binaire de la mémoire, puis désérialisez-le en tant que nouvelle instance.

EDIT

En outre, si vous envisagez la sérialisation et si les performances sont votre principale préoccupation, veuillez également prendre en compte le test de performance suivant Sérialisation manuelle 200% + plus rapide que BinaryFormatter .

0voto

chris166 Points 3333

Il y a plusieurs façons, mais je recommande de mettre en œuvre ICloneable sur l'objet arbre, et ensuite appeler Clone() pour créer une copie profonde.

0voto

Ivan Zlatanov Points 2317

Je vous suggère d'examiner de près vos classes d'arbre, et si vous devez appliquer la sémantique de la copie, utilisez alors struct au lieu de la classe. Sinon, utilisez ICloneable pour fournir la méthode Clone(), comme l'a suggéré chris166.

0voto

Vinay Sajip Points 41286

Avec un arbre de cette taille, en avoir plusieurs copies entraînera une surcharge mémoire importante. Pourquoi ne pas simplement organiser les données à chaque nœud (avec un dictionnaire, par exemple) de façon à ce qu'il contienne toutes les différentes données (comme celles que vous obtenez actuellement), mais organisées d'une façon qui convient à vos besoins réels ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X