news 2026/3/2 6:24: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/2/25 15:15:56

幻影API聚合管理系统源码基于 PHP+Mysql 进行开发

幻影API聚合管理系统源码&#xff0c;基于 PHPMysql 进行开发的&#xff0c;拥有多接口管理功能&#xff0c;支持不同的计费方式包括包月、按次、会员专享。用户可以全自动注册使用&#xff0c;系统支持在线调试和日志记录。现有API接口只需要几行代码就可以接入本系统&#xf…

作者头像 李华
网站建设 2026/3/2 13:37:57

Skills:AI能力封装协议的深度剖析,从原理到商业应用

不知道是因为推流算法&#xff0c;还是其他什么原因&#xff0c;最近打开小红书&#xff0c;微信公众号满屏满眼都是“教你怎么用 Skills”&#xff0c;“Skills 如何创造颠覆性产品”&#xff0c;“Skills Hub 站如何成就下一个‘死了么’”之类的文章。长期低估&#xff0c;短…

作者头像 李华
网站建设 2026/2/16 13:36:40

Qwen3-Coder-Next 昇腾适配:开发者在线体验一站式通关指南

2 月 4 日&#xff0c;Qwen3-Coder-Next 正式对外开源发布。该模型面向编程智能体与本地开发场景打造&#xff0c;提供完整开源权重&#xff0c;适合开发者进行二次开发与工程集成。昇腾已适配支持该模型&#xff0c;相关模型与权重已同步上线 AtomGit AI。 &#x1f449; 立即…

作者头像 李华
网站建设 2026/3/1 15:14:19

基于深度学习的相位图生成与时间序列预测系统

基于深度学习的相位图生成与时间序列预测系统 摘要 本文介绍了一种基于深度学习的方法,通过相机采集的图像序列生成对应的相位图,并实现基于时间序列的相位图预测。系统采用编码器-解码器架构处理图像到相位的映射,并结合时序模型实现帧间预测。本文将详细阐述系统设计、模…

作者头像 李华
网站建设 2026/2/27 7:38:46

Canvas 画板的实现 2.0:支持放大、缩小

在 1.0 版本中&#xff0c;画板已经具备“好用”的基础能力&#xff0c;但一旦用户想细画或写字时&#xff0c;缩放就成了刚需。本篇记录我为画板加入“放大/缩小”的实现思路&#xff1a;既保留 1.0 的绘制体验&#xff0c;又在缩放过程中保证笔迹精度与交互一致性。 目标与约…

作者头像 李华
网站建设 2026/2/24 2:42:36

领英收不到验证码怎么办? 解决方案全解析

在注册或登录 LinkedIn 时&#xff0c;很多用户都会遇到同一个问题&#xff1a;页面提示“验证码已发送”&#xff0c;但邮箱或手机始终收不到。 甚至有时会直接提示“已超出验证请求次数”。这类问题看似是短信或邮箱故障&#xff0c;实际上更多与 LinkedIn 的风控机制有关。一…

作者头像 李华