Question

Je vous écris pour un programme de modélisation 3D d'un plug-in. Il y a aa caractéristique de l'API où vous pouvez intercepter le pipeline d'affichage et insérer la géométrie supplémentaire qui sera affichée avec en être fait dans le modèle (vous pouvez le voir, mais vous ne pouvez pas sélectionner / déplacer / supprimer, etc., etc ..) .

Une partie de cette fonctionnalité de l'API est une méthode qui est appelée à chaque rafraîchissement de l'écran qui est utilisé pour indiquer au programme ce que la géométrie supplémentaire pour afficher. En ce moment j'ai un HashSet est réitérée par le biais d'une instruction foreach. OnBrep est la classe de géométrie générique de l'API.

J'ai une commande supplémentaire qui décharge la géométrie « Ghost » dans le modèle actuel. J'ai trouvé que si la géométrie est en fait dans le modèle de l'affichage accélère beaucoup. Je me demande donc s'il y a un moyen plus rapide fourni la liste des objets au programme? Est-ce qu'un simple tableau à deux dimensions nettement plus rapide qu'un HashSet <>?

Était-ce utile?

La solution

Le moyen le plus rapide pour retourner une collection d'objets est à retourner, soit (a) le type physique qui a été utilisé en interne pour construire la collection, ou (b) un type qui peut être moulé à de telle sorte que les données n'est pas copié dans la mémoire. Dès que vous commencez la copie de données (par exemple CopyTo, ToArray, ToList, un constructeur de copie, etc.) que vous avez perdu du temps.

Cela dit, à moins que le nombre d'éléments est important, ce sera un micro-optimisation et donc probablement pas la peine de faire. Dans ce cas, il suffit de retourner le type de collection qui serait plus utile au code d'appel. Si vous êtes unusure, faire des tests chronométrés plutôt que de prendre une supposition.

Autres conseils

Cette est un vaste étude sur la performance des HashSet / dictionnaire / liste générique

Mais il est à propos de recherche de clé

Personellement je pense qu'une liste normale ou générique est plus rapide pour une opération de foreach, car il ne comporte pas les éléments indexés / frais généraux (esp etc INSERTION DE devrait être plus rapide) .... Mais c'est juste un sentiment d'intestin.

En général, lorsque vous travaillez avec des graphismes 3D, vous obtenez les meilleures performances si vous parvenez à réduire le tirage appels / changements d'état autant que possible.

Dans votre cas, je vais essayer de réduire les appels de tirage au minimum en fusionnant la géométrie ou enjolivées d'essayer d'utiliser une sorte de fonction de traitement par lots si elle est disponible.

Il est très probable que la chute de cadre n'est pas en raison de l'utilisation d'une liste de hachage / dictionnaire au lieu d'un tableau. (A moins d'une fonction de hachage cassé / cher quelque part ...).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top