【发布时间】:2011-01-29 01:18:47
【问题描述】:
我只是想知道哪个更便宜,使用 try catch 块进行索引越界或检查多维数组的长度并比较值?
我感觉它是长度,因为我可以将长度存储在一个变量中,然后只做相对便宜的 if。我只是不确定 try-catch 有多贵。
谢谢!
【问题讨论】:
我只是想知道哪个更便宜,使用 try catch 块进行索引越界或检查多维数组的长度并比较值?
我感觉它是长度,因为我可以将长度存储在一个变量中,然后只做相对便宜的 if。我只是不确定 try-catch 有多贵。
谢谢!
【问题讨论】:
检查长度比捕获异常要便宜得多。当你有一个 try..catch 块时,它会在你的代码中添加额外的结构来捕获异常——这很好,我没有说这是错误的,但如果你可以检查边界的长度,那么就这样做吧。
【讨论】:
抛出异常是一项昂贵的操作(因为您必须生成堆栈跟踪)。进行长度检查。
【讨论】:
如果您想知道哪种方法更适合您的情况,我会说“测量”。
例如:如果越界情况极为罕见怎么办?所以越界永远不会抛出......在这种情况下,所有额外的“手动”边界检查可能会更慢。
CAVEATS:try/catch 需要围绕许多越界检查,因此 try 的设置不太重要。
【讨论】:
与检查整数值相比,抛出异常非常昂贵。然而,这无关紧要。更重要的是,即使例外很便宜,它们仍然是错误的选择。异常的意义在于它表示异常发生。理想情况下,异常应该只用于表示意外的、罕见的,最好是致命的。
另一种看待它的方式:如果您正在访问一个超出其边界的数组,那么您就有一个错误。修复错误。异常处理程序隐藏错误,它不修复错误。
【讨论】: