C++ .NET4,C++;,如果…else和switch()对性能有何影响
现在在我的应用程序中,我使用的是这种结构C++ .NET4,C++;,如果…else和switch()对性能有何影响,c++,.net,performance,algorithm,C++,.net,Performance,Algorithm,现在在我的应用程序中,我使用的是这种结构 if (e->UserState->Equals(1)) {} //stuff 1 else if (e->UserState->Equals(2)) {} //stuff 2 ... // e - EventArgs of .NET 4 WebClient class 我应该更好地定义吗 int n = (int)e->UserState; 并使用开关() 它会对性能产生某种影响吗?(大约15种e->UserState
if (e->UserState->Equals(1)) {} //stuff 1
else if (e->UserState->Equals(2)) {} //stuff 2
... // e - EventArgs of .NET 4 WebClient class
我应该更好地定义吗
int n = (int)e->UserState;
并使用开关()
它会对性能产生某种影响吗?(大约15种e->UserState变体)
(大约15种e->UserState变体)
我将以switch
的形式编写它,纯粹是为了可读性!至于性能,您可以通过分析进行检查,但我怀疑是否存在统计上的显著差异
(大约15种e->UserState变体)
我将以
switch
的形式编写它,纯粹是为了可读性!至于性能,您可以通过评测进行检查,但我怀疑差异是否有统计学意义。性能不是这里的关键因素(因为它是可以忽略的),而是可读性。因此,请使用开关
或甚至一种方法:
public static void Stuff(UserState state)
{
// do your stuff here ...
}
现在您可以使用它(假设UserState
是一个现有的枚举):
性能不是这里的关键因素(因为它是可以忽略的),而是可读性。因此,请使用
开关
或甚至一种方法:
public static void Stuff(UserState state)
{
// do your stuff here ...
}
现在您可以使用它(假设UserState
是一个现有的枚举):
开关大小写会更快(在本例中),因为编译器可以做很多技巧使其更快,例如使用值作为该表索引的跳转表或二进制搜索。
请注意,如果“if”中的条件仅包含变量和常量,编译器可能会执行相同的操作,但如果您在条件中调用某些函数/方法,编译器必须按顺序执行每个检查,以保持此函数中可能产生的副作用。切换情况会更快(在这种情况下)因为编译器可以做很多技巧来提高速度,比如使用值作为表索引的跳转表或二进制搜索。
请注意,如果“if”中的条件仅包含变量和常量,编译器可能会执行相同的操作,但如果您在条件中调用某些函数/方法,编译器必须按顺序执行每个检查,以保留此函数中可能产生的副作用
UserState state = (UserState)(int)e;
Stuff(state);