.net Try-Catch块的内部机制?net framework实际上是如何做到这一点的?

.net Try-Catch块的内部机制?net framework实际上是如何做到这一点的?,.net,try-catch,try-catch-finally,.net-framework-version,try-finally,.net,Try Catch,Try Catch Finally,.net Framework Version,Try Finally,我知道如何使用try-catch-finally块。每个人都有 但是我想知道这个伟大功能的内部实现。它是否像SQL中的提交或回滚方法一样工作 使用try-catch是否会导致性能问题 我们是否需要为每个小函数使用try-catch net程序是否领先一步并将结果保存在ram中 有人能给我们解释一下.NETFramework是如何处理这个非常有用的特性的吗?我想要一个深刻的技术答案。(幕后) 它是否像SQL中的提交或回滚方法一样工作 不,没有。Clr不保存变量的旧值。如果抛出异常,clr将跳回堆栈

我知道如何使用try-catch-finally块。每个人都有

但是我想知道这个伟大功能的内部实现。它是否像SQL中的提交或回滚方法一样工作

使用try-catch是否会导致性能问题

我们是否需要为每个小函数使用try-catch

net程序是否领先一步并将结果保存在ram中

有人能给我们解释一下.NETFramework是如何处理这个非常有用的特性的吗?我想要一个深刻的技术答案。(幕后)

它是否像SQL中的提交或回滚方法一样工作

不,没有。Clr不保存变量的旧值。如果抛出异常,clr将跳回堆栈中的前一个方法

使用try-catch是否会导致性能问题

是的。如果抛出异常,clr将创建stacktrace。这是一项非常昂贵的手术。但是,try/catch块不会对性能产生严重的副作用

我们是否需要为每个小函数使用try-catch

这取决于你的编码风格

有人能给我们解释一下.NETFramework是如何处理这个非常有用的特性的吗?我想要一个深刻的技术答案。(幕后)

有一篇关于它的好文章:

它是否像SQL中的提交或回滚方法一样工作

不,没有。Clr不保存变量的旧值。如果抛出异常,clr将跳回堆栈中的前一个方法

使用try-catch是否会导致性能问题

是的。如果抛出异常,clr将创建stacktrace。这是一项非常昂贵的手术。但是,try/catch块不会对性能产生严重的副作用

我们是否需要为每个小函数使用try-catch

这取决于你的编码风格

有人能给我们解释一下.NETFramework是如何处理这个非常有用的特性的吗?我想要一个深刻的技术答案。(幕后)


有一篇关于它的好文章:

没有提交或回滚功能。你必须实现这一点。就实现而言,它是复杂的,但是如果没有抛出异常,通常不会产生开销。当抛出它们时,有一个算法可以在当前函数中或链的更高位置查找捕获块(实际上,分两个阶段,一个在堆栈上,一个在堆栈下)。这是昂贵的,但也没关系,因为这是针对异常(即,希望罕见)行为的。除非您确实准备好处理错误,否则不要使用try/catch。如果没有,那么就让来电者知道。大多数时候,你会希望它冒出泡沫。不过,使用try/finally很好,因此您可以回滚任何内容或确保某些活动发生,而不考虑异常情况。您可以轻松获取幕后信息和源代码。相当多的代码,它是CLR中第三大源文件。它最终依赖于Windows上的SEH(结构化异常处理),这可能是您真正想研究的主题。没有提交或回滚功能。你必须实现这一点。就实现而言,它是复杂的,但是如果没有抛出异常,通常不会产生开销。当抛出它们时,有一个算法可以在当前函数中或链的更高位置查找捕获块(实际上,分两个阶段,一个在堆栈上,一个在堆栈下)。这是昂贵的,但也没关系,因为这是针对异常(即,希望罕见)行为的。除非您确实准备好处理错误,否则不要使用try/catch。如果没有,那么就让来电者知道。大多数时候,你会希望它冒出泡沫。不过,使用try/finally很好,因此您可以回滚任何内容或确保某些活动发生,而不考虑异常情况。您可以轻松获取幕后信息和源代码。相当多的代码,它是CLR中第三大源文件。它最终将借助于Windows上的SEH(结构化异常处理),这可能是您真正想研究的主题。