我有一个情况:
我需要和班级做点什么。
什么应该更有效率,用IFs修改方法或为每个动作创建方法?
public value Value(int command)
{
if (command == 1)
{
DoSomething1();
}
if (command == 2)
{
DoSomething2();
}
else
{
return empty();
}
}
这个命令会有50多个。 在执行的性能和可执行的大小方面,哪个更好?
答案 0 :(得分:4)
在高层,您似乎正在尝试实施某种动态调度系统?或者你只是想在没有任何多态性的情况下执行指定的操作?这很难说。
无论如何,基于您给出的示例,switch块将是最高性能的,因为JIT编译器将其转换为有效的哈希表查找而不是一系列比较,所以只需执行此操作:
enum Command { // observe how I use an enum instead "magic" integers
DoSomethingX = 1,
DoSomethingY = 2
}
public Value GetValue(Command command) {
switch(command) {
case Command.DoSomethingX: return DoSomethingX();
case Command.DoSomethingY: return DoSomethingY();
default: return GetEmpty();
}
}
我还注意到switch
块也意味着您可以获得更紧凑的代码。
答案 1 :(得分:3)
这不是一个性能问题,而是一个范式问题。
在C#中,方法应该是任务的封装。你在这里有一个公尺船任务,每个任务无关。这应该不是一个单一的方法。想象一下,将来尝试维护这种方法。想象一下,尝试调试它,想知道你在方法中的每个位被调用。
如果你把它分开,你的生活会更容易,但表现可能没什么区别。
答案 2 :(得分:1)
虽然单独的方法几乎肯定会在性能方面更好,但您不太可能注意到差异。但是,使用单独的方法肯定会大大提高可读性,这一点非常重要。