【问题标题】:Try-Catch or Check Length?Try-Catch 还是检查长度?
【发布时间】:2011-01-29 01:18:47
【问题描述】:

我只是想知道哪个更便宜,使用 try catch 块进行索引越界或检查多维数组的长度并比较值?

我感觉它是长度,因为我可以将长度存储在一个变量中,然后只做相对便宜的 if。我只是不确定 try-catch 有多贵。

谢谢!

【问题讨论】:

    标签: c# try-catch


    【解决方案1】:

    检查长度比捕获异常要便宜得多。当你有一个 try..catch 块时,它会在你的代码中添加额外的结构来捕获异常——这很好,我没有说这是错误的,但如果你可以检查边界的长度,那么就这样做吧。

    【讨论】:

    • 同意,与检查数组的长度参数相比,try/catch 非常昂贵。 +1
    【解决方案2】:

    抛出异常是一项昂贵的操作(因为您必须生成堆栈跟踪)。进行长度检查。

    【讨论】:

    • 这可能取决于抛出异常的频率。如果你每次都检查长度,但每 100,000 次中只有 1 次超出边界,那么单个异常是否仍然比 100,000 次边界检查更昂贵?
    • @Eric Petrolje:整数比较是一种廉价的操作; CPU 可以在其中一个 ALU(算术逻辑单元)上将其作为单个操作运行。
    【解决方案3】:

    如果您想知道哪种方法更适合您的情况,我会说“测量”。

    例如:如果越界情况极为罕见怎么办?所以越界永远不会抛出......在这种情况下,所有额外的“手动”边界检查可能会更慢。

    CAVEATS:try/catch 需要围绕许多越界检查,因此 try 的设置不太重要。

    【讨论】:

      【解决方案4】:

      与检查整数值相比,抛出异常非常昂贵。然而,这无关紧要。更重要的是,即使例外很便宜,它们仍然是错误的选择。异常的意义在于它表示异常发生。理想情况下,异常应该只用于表示意外的、罕见的,最好是致命的。

      另一种看待它的方式:如果您正在访问一个超出其边界的数组,那么您就有一个错误。修复错误。异常处理程序隐藏错误,它不修复错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 2015-03-27
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 2015-09-23
        相关资源
        最近更新 更多