标记枚举速度与布尔值
本文关键字:布尔值 速度 枚举 | 更新日期: 2023-09-27 18:24:58
[Flags]
enum Flaggy { None = 0, A=1, B=2, C=4, D=8}
Flaggy test;
或
bool A, B, C, D;
标记的枚举是否比布尔值更有效,还是无关紧要?在中央处理器方面?
编辑:是的,我知道 [标志] 与非标志枚举相比,除了添加 .ToString(( 方法和一些可读性。好吧,这段代码每秒检查25000+次,所以即使是微增益也是值得的。但是与 20 个布尔值相比,Flags 枚举在代码中更好阅读,并且在 .NET 4.0 中,HasValue(( 弥补了以前烦人的标志值检查。但是,代替 if-check 的方法调用是另一个微 CPU 消耗。但是阅读来得如此之快的答案,我想这更多的是可读性的选择,而不是性能的选择。
标记的枚举将作为内存中的单个 Int32 进行支持,而布尔值将存储为单独的布尔变量。所以两者都会占用相同的内存。
在 CPU 方面,使用枚举时,您需要执行按位运算来确定值,而对于布尔值,这是一个简单的if
所以我想它会稍微快一些。但这是一个过早的优化,你根本不应该担心。两者都足够快,因此请选择使您的代码更具可读性的那个。
首先,
AFAIK 没有[Flagged]
- 最好的猜测是你的意思是[Flags]
,请参阅 MSDN。
在 CPU 时间方面是否更快在很大程度上取决于您究竟如何处理它们......但我认为这是"微优化"(这通常是一个坏主意(......使用探查器运行代码,在猜测要优化的位置/内容之前,先查看瓶颈的真正位置......
在这种情况下,
我更喜欢标志而不是布尔值,当然性能没有太大区别,并且进行位优化也不好,因为它会降低代码可读性和代码维护。