2010-10-21 17 views
1

Quels sont les avantages et les inconvénients de créer une instance de collection à la volée ou au préalable, lors de l'initialisation pour une utilisation ultérieure.Compromis de création de collection à la volée ou au préalable

J'ai un ensemble de threads dont chacun a besoin de sortir un tampon qui est mis en file d'attente sur une file d'attente de priorité ou d'intervalle. Je me demandais s'il serait plus efficace dans C# de créer, un tampon circulaire de type X, de taille 2048 au préalable, et d'écrire dans chacun, et de réutiliser plus tard, ou de permettre à chaque thread de créer un buffer à la volée il, c.-à-d. les créer si nécessaire, et permettre un nettoyage normal selon.

Je sais que le GC essaierait de faire disparaître la file circulaire pré-créée. J'ai eu d'étranges problèmes de débogage dans le passé, à la recherche d'objets qui n'existent plus, parce que le GC l'a supprimé comme indiqué.

Toute aide ou conseil serait apprécié.

Bob.

Répondre

1

GC ne supprimera pas un objet que vous avez encore une référence à - en d'autres termes, si vous étiez en mesure de utiliser votre tampon pré-créé, il ne serait pas les déchets ramassés - à moins que vous aviez un WeakReference à ça, bien sûr.

Avez-vous connaître que ce sera un goulot d'étranglement de performance à tous? Pourquoi ne pas écrire le code le plus simple qui fonctionne en premier, et mesurer comment il fonctionne bien?

+0

Premier point, je sais. Deuxième point, je ne sais pas si ce sera un goulot d'étranglement, certainement le créer à la volée serait moins de code. –