Bonsoir, ce sujet est surement un marronier qui revient régulierement jusqu'a à vous, mais la question me parait très importante surtout du fait que j'ai pu voir de grosses collections d'objets être contenus dans des conteneurs pas forcément très réputés pour leur performance quand un grand nombre d'objets y est stocké.
Je me questionne au sujet de la meilleure collection à choisir en fonction de mes priorités, sachant que je cherche à stocker des références d'objets qui en general seront d'environ 500 et dont certaines pourraient s'élever à 20k, le tout pour y effectuer des ajout / remove fréquents et des itérations moins fréquentes, avec du tri en linq. Cela doit etre le plus rapide possible évidemment c'est pour un serveur.
les listes sont fréquemment pointées du doigt pour leur faiblesse quand elles contiennent un grand nombre d'entiers ou un petit nombre de strings de taille moyenne, selon certains benchmark maison :
Et pourtant, je remarque que pas mal de studios qui utilisent des moteurs de jeu en c# natif utilisent énormément de listes d'objets (que ce soit pour le moteur lui meme ou pour la partie serveur de ces jeux) et ce pour des collections qui sont assez importantes à itérer ou à SELECT avec linq (+ de 30 000) et avec des add/remove très fréquents, pourtant selon ces benchmark il apparaitrait que les listes soient vraiment très désavantagées pour ces types de collections, du coup je m'interroge sur le fait de remplacer toutes les listes qui contiennent beaucoup d'objets par des hashset.
Selon vous, ces benchmark sont ils pertinents ?
La liste a elle vraiment une impact important sur l'execution des traitements quand elles contiennent un nombre important d'objet ?
Que me conseilleriez vous de privilégier, au regard des informations que je vous ai donné plus haut ? (rester sur des listes, passer en hashset ? Ce qui ne me dérangerait pas puisque mes listes ne sont pas censés accueillir de doublon).
Merci.
Partager