前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET9异常

.NET9异常

作者头像
江湖评谈
发布2024-05-11 16:51:39
790
发布2024-05-11 16:51:39
举报
文章被收录于专栏:天下风云天下风云

前言

.NET9为了提速,把异常模型给重写了。官方的异常测试数值中,这种模型处理提高了2到4倍的性能。新的实现基于AOT的异常处理模型架构。它总共实现在了两个平台(Win/Linux)四种指令集(/x64/winarm64/arm/arm64上面。

AOT异常模型

整体的来说,之前的异常模型基于C++的非托管处理手段。但是新的异常模型,基于的是自举的C#托管处理手段。两者不同在于之前是ProcessCLRException作为处理异常模块的CLR函数,新的则是托管函数RhThrowEx作为处理异常模块的CLR函数。实际上这一篇讲的是旧的异常模型处理(.NET9 PreView3之前异常的处理情况):.NET9异常(CLR)原理(顶阶技术

新的处理:

代码语言:javascript
复制
#if NATIVEAOT
        [RuntimeExport("RhThrowEx")]
#endif
        public static void RhThrowEx(object exceptionObj, ref ExInfo exInfo)
        {
#if NATIVEAOT
            // trigger a GC (only if gcstress) to ensure we can stackwalk at this point
            GCStress.TriggerGC();

            InternalCalls.RhpValidateExInfoStack();
#endif
            // Transform attempted throws of null to a throw of NullReferenceException.
            if (exceptionObj == null)
            {
                IntPtr faultingCodeAddress = exInfo._pExContext->IP;
                exceptionObj = GetClasslibException(ExceptionIDs.NullReference, faultingCodeAddress);
            }

            exInfo.Init(exceptionObj);
            DispatchEx(ref exInfo._frameIter, ref exInfo);
            FallbackFailFast(RhFailFastReason.InternalError, null);
        }

上面很明显的看到它是一个AOT与JIT的混合体。DispatchEx函数分发了异常处理函数,进行调用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江湖评谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AOT异常模型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档