说我有以下switch
声明:TABLESWITCH性能提升?
switch (i)
{
case 0: ...; return ...;
case 1: ...; return ...;
case 2: ...; return ...;
case 400: ...; return ...;
case 401: ...; return ...;
case 402: ...; return ...;
}
由于差距太大,编译器生成在这里合理TABLESWITCH
(O(1)
复杂)指令,它采用了LOOKUPSWITCH
(O(log n)
复杂性)。是否有可能通过拆分switch
增加这个代码的性能分为两个这样的:
switch (i)
{
case 0: ...; return ...;
case 1: ...; return ...;
case 2: ...; return ...;
}
switch (i)
{
case 400: ...; return ...;
case 401: ...; return ...;
case 402: ...; return ...;
}
这将导致编译器生成两个TABLESWITCH
而不是一个LOOKUPSWITCH
。
1)[过早优化是万恶之源](http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize)(Donald Knuth)。 2)为什么不简单地使用地图? – Seelenvirtuose 2015-04-04 13:08:55
因为地图需要装箱,这对我的需求来说太低效了。另外,我的使用案例对性能至关重要,所以我可以乐于接受过早的优化。 – Clashsoft 2015-04-04 13:20:42
那么为什么不使用数组呢?数组查找肯定比方法调度便宜。如果你没有注意到这一点,我非常怀疑你的说法是否有证据支持。 – chrylis 2015-04-04 13:22:26