news 2026/6/15 11:50:25

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/6/1 10:52:43

米尔顿·弗里德曼《实证经济学方法论》解读

米尔顿弗里德曼《实证经济学方法论》解读 米尔顿弗里德曼的《实证经济学方法论》是1953年收录于其《实证经济学论文集》的开篇纲领性论文&#xff0c;是现代实证经济学发展的基石性文献。该文以工具主义哲学为内核&#xff0c;打破了传统经济学方法论的混乱局面&#xff0c;确…

作者头像 李华
网站建设 2026/6/14 8:35:45

数据立方体在智慧城市建设中的关键作用

数据立方体&#xff1a;打通智慧城市数据壁垒的核心引擎 摘要/引言&#xff1a;当智慧城市遇到“数据孤岛”难题 清晨7点&#xff0c;深圳南山区的上班族小李盯着手机上的导航APP——屏幕上红得发亮的拥堵路段像一条凝固的血管。与此同时&#xff0c;3公里外的环保监测站发出…

作者头像 李华
网站建设 2026/6/11 5:32:00

五种并行处理策略对比调研

在处理大规模文本数据时,合理利用多进程可以显著提升处理速度。然而,并行策略的选择对性能影响巨大。本文通过一个具体的 JSONL 文件处理任务(为每行文本添加词数统计),实现并对比五种不同的多进程策略,分析其性能差异和适用场景。 所有代码均可直接复制运行,包含数据生…

作者头像 李华
网站建设 2026/6/10 15:49:34

汉字才是终极“外挂”!碾压英文的千年智慧,在AI时代彻底封神

汉字才是终极“外挂”&#xff01;碾压英文的千年智慧&#xff0c;在AI时代彻底封神一、 开篇暴击&#xff1a;英文凭啥是世界语言&#xff1f;答案扎心了一、开篇暴击&#xff1a;英文凭啥是世界语言&#xff1f;答案扎心了1.1 别扯 “优越性”&#xff01;世界语言是舰炮轰出…

作者头像 李华
网站建设 2026/6/13 0:56:40

大语言模型部署难题破解:三大优化方向全解析,程序员必藏干货

大语言模型 (LLM) 因其在各种任务中的卓越表现而备受关注。 然而大语言模型的部署推理并不简单&#xff0c;尤其是针对在给定资源受限场景下&#xff0c;巨大的计算和内存需求给LLM推理部署带来了挑战&#xff0c;具体如&#xff1a;高延迟、低吞吐、高存储等。 一、前期知识 …

作者头像 李华