国旗枚举速度与布尔?

时间:2012-02-18 10:12:03

标签: c# enums

[Flags]
enum Flaggy { None = 0, A=1, B=2, C=4, D=8}

Flaggy test;

bool A, B, C, D;

标记的枚举是否比布尔值更有效,还是不重要?在cpu方面?

编辑: 是的我知道除了添加.ToString()方法和一些可读性之外,[Flags]与非标记枚举相比并没有真正做任何事情。好吧,这段代码每秒检查25000次以上,所以即使微观增益也是值得的。但是,与类似20个布尔值相比,Flags Enum在代码中读取更好,而使用.NET 4.0,HasValue()弥补了之前烦人的Flags值检查。但是一个方法调用而不是if-check是另一个微CPU消耗。 但是,阅读快速得出的答案,我想这更像是一种可读性而非性能。

3 个答案:

答案 0 :(得分:3)

标记的枚举将作为内存中的单个Int32备份,而布尔值将作为单独的布尔变量存储。所以两者都将占据相同的记忆。

就CPU而言,使用枚举,您将需要执行按位运算来确定值,而使用布尔值,它是一个简单的if所以我想它会稍快一点。但这是一个不应该过分关注的过早优化。两者都足够快,所以选择一个使你的代码更具可读性的那个。

答案 1 :(得分:2)

首先关闭AFAIK没有[Flagged] - 最好的猜测就是[Flags],请参阅MSDN

它在CPU时间方面是否更快取决于你对它们的确切做法......但我认为这是“微优化”(这通常是一个坏主意)...运行代码分析器并在猜测优化位置/优化之前查看瓶颈的确切位置......

答案 2 :(得分:2)

在这种情况下,我更喜欢使用flags而不是boolean,确保性能差别不大,并且进行位优化并不好,因为它会降低代码可读性和代码维护。