news 2026/4/15 16:39:28

C#动态代码最近实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#动态代码最近实践

使用动态代码后发现内存暴涨, 修复后,最近实践代码如下:
// 关键是这里, 实现了baseScript复用, 否则每次调用内存都会大幅增长, 容易奔溃
var newScript = baseScript.ContinueWith(code);

usingMicrosoft.CodeAnalysis.CSharp.Scripting;usingMicrosoft.CodeAnalysis.Scripting;publicclassDynamicCode{// 创建脚本选项,添加引用和导入(按需), 使用静态, 复用privatestaticScriptOptionsscriptOptions=ScriptOptions.Default.WithReferences(typeof(List<>).Assembly,typeof(ISqlSugarClient).Assembly,typeof(ZXing.BarcodeFormat).Assembly,typeof(SixLabors.ImageSharp.Image).Assembly,typeof(ZXing.ImageSharp.BarcodeWriter<>).Assembly).WithImports("System","System.Collections.Generic","System.Linq","System.IO","System.Linq.Expressions","System.Threading.Tasks","Newtonsoft.Json.Linq","Yitter.IdGenerator","SqlSugar","Admin.NET.Core","System.Text.RegularExpressions","Newtonsoft.Json","ZXing.Common","ZXing.ImageSharp","SixLabors.ImageSharp","SixLabors.ImageSharp.Formats.Png","SixLabors.ImageSharp.PixelFormats");// 导入命名空间privatestaticScriptbaseScript=CSharpScript.Create("",options:scriptOptions,globalsType:typeof(CSharpScriptGlobals4Print));/// <summary>/// 执行动态C#代码获取数据源/// funBody举例/// var funBody = @"var obj = db.Queryable<BasPrint>().ToList(); return new {list=obj};/// </summary>protectedasyncTask<dynamic>QueryDataWithFunBody(stringfunBody,stringp1,dynamicp2){Log.Warning($"QueryDataWithFunBody p1={p1}");Log.Warning($"QueryDataWithFunBody p2={JSON.Serialize(p2)}");Log.Warning($"QueryDataWithFunBody funBody={funBody}");if(string.IsNullOrWhiteSpace(funBody)){returnnew{};}// 创建脚本运行时,并传入全局变量varnewDb=db.CopyNew();// 创建一个新的数据库连接varutils=newCommonUtils();// 创建脚本运行时,并传入全局变量varglobals=newCSharpScriptGlobals4Print{_db=newDb,utils=utils,_p1_=p1,_p2_=p2,};stringcode=$@"public dynamic Multiply(ISqlSugarClient db, string p1, dynamic p2) {{{funBody}}} Multiply(_db, _p1_, _p2_) ";try{varnewScript=baseScript.ContinueWith(code);// 关键是这里, 实现了baseScript复用, 否则每次调用内存都会大幅增长, 容易奔溃varscriptState=awaitnewScript.RunAsync(globals);// 传入变量, 执行动态代码if(scriptState.ReturnValue!=null){varresult=scriptState.ReturnValue;Log.Warning($"QueryDataWithFunBody data={result}");returnresult;}else{Log.Warning($"QueryDataWithFunBody 没有返回值");returnnull;}}catch(CompilationErrorExceptionex){Log.Error("编译错误[QueryDataWithFunBody]",ex);throwOops.Oh($"编译错误[QueryDataWithFunBody]<br>{ex.Message}");}catch(Exceptionex){Log.Error("执行错误[QueryDataWithFunBody]",ex);throwOops.Oh($"执行错误[QueryDataWithFunBody]<br>{ex.Message}");}}}publicclassCSharpScriptGlobals4Print{publicISqlSugarClient_db;publicCommonUtilsutils;publicstring_p1_;publicdynamic_p2_;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 5:56:17

PPP与PPPoE协议介绍

我们之前学习的大多是局域网LAN内常用的技术&#xff0c;但是我们总是需要访问Internet&#xff0c;需要访问百度、B站等等&#xff0c;那怎样让局域网访问外面的资源呢&#xff0c;其实我们已经学习过了NAT转换&#xff0c;但是那对于广域网的架构我们还是需要学习下的。一、广…

作者头像 李华
网站建设 2026/3/26 7:51:08

革新!AI应用架构师引领AI驱动元宇宙教育的创新变革

AI应用架构师的革新使命&#xff1a;构建AI驱动的元宇宙教育新生态 关键词 AI应用架构、元宇宙教育、数字孪生教师、多模态交互、个性化学习引擎、教育算力、场景化实践 摘要 当"元宇宙"从概念走向落地&#xff0c;当"AI"从工具升级为"智能伙伴"…

作者头像 李华
网站建设 2026/4/15 16:01:21

从单模态到多模态:AI原生审核技术的融合创新

从单模态到多模态:AI原生审核技术的融合创新 关键词:多模态AI、内容审核、跨模态对齐、融合模型、AI原生系统 摘要:当短视频里的暴力画面配上煽动性配音,当电商商品图隐藏虚假宣传文字,当社交平台评论区用“黑话”规避文本过滤——传统单模态审核技术正面临前所未有的挑…

作者头像 李华
网站建设 2026/4/14 10:17:51

Vue day8

1.state状态2.mutations3.mapMutations4.actions5.mapActions6.getters7.模块module

作者头像 李华
网站建设 2026/4/9 8:07:36

Java实习模拟面试深度复盘:蔚来汽车一面全解析 —— 高并发转账手撕、synchronized vs ReentrantLock 核心对比、“最牛技术问题”实战拆解

Java实习模拟面试深度复盘&#xff1a;蔚来汽车一面全解析 —— 高并发转账手撕、synchronized vs ReentrantLock 核心对比、“最牛技术问题”实战拆解 前言 本文完整还原并深度剖析笔者参加蔚来汽车&#xff08;NIO&#xff09;Java后端实习生岗位第一轮技术面试的真实全过程。…

作者头像 李华