Флаг enum speed против логических значений? - PullRequest
0 голосов
/ 18 февраля 2012
[Flags]
enum Flaggy { None = 0, A=1, B=2, C=4, D=8}

Flaggy test;

или

bool A, B, C, D;

Является ли помеченное перечисление более эффективным, чем логическое значение, или это не имеет значения? В пересчете на процессор?

EDIT: Да, я знаю, что [Flags] на самом деле ничего не делает по сравнению с перечислениями без флагов, кроме добавления метода .ToString () и некоторой читабельности. Ну, этот кусок кода проверяется примерно 25000+ раз в секунду, так что даже микро усиление того стоит. Но перечисление Flags Enum лучше читать в коде по сравнению с примерно 20 логическими значениями, а в .NET 4.0 HasValue () компенсирует ранее раздражающую проверку значений Flags. Но вызов метода вместо проверки if - это еще одна утечка микропроцессора. Но, читая ответы, которые пришли так быстро, я полагаю, что это скорее выбор читабельности, чем производительность.

Ответы [ 3 ]

3 голосов
/ 18 февраля 2012

Помеченное перечисление будет сохранено как один Int32 в памяти, тогда как логические значения будут сохранены как отдельные логические переменные. Так что оба будут занимать одну и ту же память.

С точки зрения CPU, с enum вам нужно будет выполнять побитовые операции для определения значений, тогда как с логическими значениями это просто if, поэтому я думаю, что это будет немного быстрее. Но это преждевременная оптимизация, которая вас вообще не должна волновать. Оба будут достаточно быстрыми, поэтому выберите тот, который сделает ваш код более читабельным.

2 голосов
/ 18 февраля 2012

Я предпочитаю флаги вместо логических в этом случае, конечно, производительность не сильно отличается, а оптимизация битов не годится, потому что это снизит читабельность кода и обслуживание кода.

2 голосов
/ 18 февраля 2012

Во-первых, AFAIK нет [Flagged] - лучше всего предположить, что вы имеете в виду [Flags], см. MSDN .

Скорость работы процессора зависит очень сильномногое о том, что именно вы делаете с ними ... но я думаю, что это "микрооптимизация" (что обычно является плохой идеей) ... запустите код с помощью профилировщика и посмотрите, где на самом деле узкие места, прежде чем угадывать, где / что оптимизировать...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...