news 2026/10/26 10:35:34

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/10/21 13:20:26

在word中怎么把段落回车替换成空 删除空行

在word中怎么把段落回车替换成空 删除空行如果想删除空行的段落&#xff0c;有文字的不能删除啊 双段落标记寻找空白行 比如想删除文档中所有的类似下图标记的空白行应该怎么实现。可以通过ctrlh 搜索^p^p连着的双段落标记查找出来&#xff0c;执行空白替换就行 ^p&#xff08;…

作者头像 李华
网站建设 2026/10/25 19:45:52

PQW系列乘用车车轮旋转弯曲疲劳试验机

PQW系列乘用车车轮旋转弯曲疲劳试验机 一、用途 PQW系列乘用车车轮旋转弯曲疲劳试验机主要用于轿车、越野车、微型汽车、中巴策划、大巴车的车轮动态弯曲弯曲疲劳试验。 本试验机参照GB标准以及ISO、SAE、JIS、VIA、TUV等标准设计制造。适用标准&#xff1a; 1)SAE J328乘用…

作者头像 李华
网站建设 2026/10/19 12:16:07

AI元人文:元认知下的人工智能伦理与学术生态

AI元人文&#xff1a;元认知下的人工智能伦理与学术生态 笔者&#xff1a;岐金兰 摘要 人工智能的价值对齐困境与学术生产的体制性异化&#xff0c;虽属不同领域&#xff0c;却共享同一深层病理&#xff1a;一个由欲望替换、客观化自我指涉与自感扭曲构成的、自我锁定的异化DOS…

作者头像 李华
网站建设 2026/10/18 17:31:42

blender 绑定衣服对齐

优化穿模问题&#xff1a; 雕刻模式&#xff0c;笔刷是扩大&#xff0c;Ctrl 笔刷是收缩。 第一步&#xff1a;把骨骼摆到“正确对齐袖子”的姿势 进入&#xff1a; 选骨架 → Pose Mode 然后&#xff1a; 转动 upperarm_l / upperarm_r 让手臂角度和袖子方向完全一致 直…

作者头像 李华