1

我有一个大型的3D数据阵列,我将随机读取和写入数据。按照设计,这些操作中的大约5%将超出此数组的范围,并且将以不同的方式处理。这是一个适合使用try/catch块的地方吗?否则,我需要6个单独的'if'语句来检查数组边界的地址。如果语句与Try/Catch检查数组边界

也许我试图在这里进行微观优化,但这些操作可能每秒发生数万次。另外,它会使代码略为干净。我在这里使用C#,但我想这是一个与语言无关的问题。

+0

你可能想看看http://stackoverflow.com/questions/891217/how-expensive-are-exceptions-in-c –

回答

3

有趣的是,你的问题一方面是而不是语言独立。在诸如C,Java,C++,C#等语言中,人们更喜欢“LBYL”(Look Before You Leap)模式;而像python这样的语言则严重强调“EAFP”(它比容许更容易提出宽恕)。

含义:在Python中,你正在使用try/catch 很多(甚至“for counting for loop”被实现为try/catch);而在C#中,您更愿意使用if/else来代替。

这些约定非常重要 - 大多数Cx语言程序员只是假设您不使用try/catch来建模控制流。

但回到你的核心要求:去if/else。正如你指出的那样,表现很好可能是一个问题;您只需要避免more expensive try/catch解决方案。

而且如上所述;作为这样做的好副作用,你的代码将会是“更主流”;因此你的代码的读者不会每分钟给你很多WTFs。

code quality by WTFs per minute

+0

感谢您的快速响应,这是非常有趣的。这是否仅仅是按照惯例?或者实际上双方都有明显的性能优势? – Camander

+0

我正在更新我的答案,同时处理该部分。这里的表现很重要。 – GhostCat