gpt4 book ai didi

.net - 为什么抛出异常这么慢?

转载 作者:行者123 更新时间:2023-12-01 15:02:54 25 4
gpt4 key购买 nike

他们告诉我们不要使用异常来控制我们程序的流程,因为抛出异常很慢。我从来没有听过任何解释为什么抛出异常这么慢。

那么问题是:

What is the mechanism of throwing exceptions and what are particular operations involved which may have performance impact?

编辑:

一些说明:我想听听操作系统需要做哪些额外的工作来处理抛出的异常。用户模式和内核模式之间是否有一些代价高昂的切换?或者构造异常对象可能代价高昂?或者也许我缺少的是切换程序流程的东西?我的问题与编程语言无关(我希望如此,但事实证明我错了)。但是,如果您需要一些 anchor ,那么我最感兴趣的是与该主题相关的 .NET 内部结构。

编辑2:

我对异常性能没有任何问题。我只想了解此机制的内部结构。

编辑3:

让我的问题更清楚。

最佳答案

异常处理需要一些复杂性和“魔法”。借用@Joni 的回应,主要成本是收集堆栈跟踪。当抛出异常时,运行时必须遍历堆栈的激活记录以寻找兼容的异常处理程序,执行 finally 阻塞每一步。所有这些都必须在运行时发生;它不能由编译器修复。在 C++ 等语言中,必须执行析构函数。

异常处理本质上是一种带外“异常”处理方式。加速正常执行的事情(例如缓存)也不起作用。 (我想这里的引用位置要差得多)。可以优化此处理,但由于 exc 处理应该是“特殊的”,因此很少受到关注。

关于.net - 为什么抛出异常这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17379589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com