2011-09-14 2 views
0

J'ai le jeu et je marque les états avec des noms. Sur chaque mise à jour fonctionnant avec des moyens d'états, vous travaillez avec leurs noms, les chaînes. Je me demandais si cela valait la peine de remplacer les chaînes avec des valeurs enum? Peut-être que cela semble stupide, mais il y a beaucoup d'états et chacun est traité au moins 30 fois par seconde.Utilisation d'enums à la place de l'accélération des chaînes?

Merci

+0

Avez-vous profilé l'application? Est-ce un réel problème ou juste perçu? Les Ints sont plus rapides que les chaînes, mais je ferais probablement le profil de l'application pour voir s'il y a un goulot d'étranglement. En guise de suivi, j'évite les comparaisons de chaînes quand quelque chose de meilleur/plus rapide fera l'affaire. – itsmatt

Répondre

1

Eh bien, avez-vous des problèmes de performance? Il est certain que l'utilisation de valeurs entières sera plus rapide, mais si la mise en œuvre est suffisamment rapide, passez du temps ailleurs. Peut-être laissez-vous un todo dans le commentaire.

0

Par défaut, enums sont traités en interne comme int s, donc si vous vérifiez plusieurs fois, il est plus rapide. Cependant, si elle est vérifiée seulement 30 fois par seconde, ce coût est dénué de sens par rapport aux autres coûts probables. Avez-vous profilé pour voir ce qui est le plus lent?

+1

[Pas tout à fait] (http://msdn.microsoft.com/fr-fr/library/sbbt4032.aspx): _Les types approuvés pour une énumération sont byte, sbyte, short, ushort, int, uint, long ou ulong ._ –

+1

à partir de votre lien: "Le type sous-jacent par défaut des éléments d'énumération est int." Vous devez explicitement le forcer à utiliser une autre classe de stockage. –

+0

Toutefois, ce n'est pas ce que votre première phrase indique. –

0

Personnellement, je pense que pour une efficacité maximale et probablement inutile, vous devriez considérer les drapeaux bit. Ceux-ci vous permettent de faire les opérateurs bit à bit standard.

[Flags] 
enum Choices 
{ 
    OptionOne = 0x0, 
    OptionTwo = 0x1  
} 

class MyClass 
{ 
    Choices mychoice = Choices.OptionOne | Choices.OptionTwo; 
} 
0

énumérations sont certainement plus propre dans ce cas et fournir une meilleure maintenabilité ... vous n'allez pas une faute de frappe d'un statut de cette façon (ou vous pourriez, mais le compilateur vous dira). Cela va aussi être plus rapide, en faisant une simple comparaison d'entier sur une comparaison de chaîne. Cela dit, si le codage est déjà fait et que vous n'avez pas de problèmes de performance spécifiques à cette implémentation de statut, il n'y a pas vraiment de raison de le changer. Comme d'autres l'ont dit, présentez-le si c'est votre seul problème.

Questions connexes