news 2026/4/23 18:02:57

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/23 16:18:13

思维链推理:提升大模型能力的核心技术

文章介绍了推理的概念和思维链(Chain-of-Thought)技术。思维链要求模型在输出最终答案前显示中间推理步骤&#xff0c;这大大提高了LLM在复杂推理任务上的表现&#xff0c;增强了模型推理的可解释性。通过实例展示了思维链如何帮助解决数学问题&#xff0c;并指出思维链可以提升…

作者头像 李华
网站建设 2026/4/23 17:55:31

缓存特工队:深入浏览器内部的秘密仓库

在前端开发的浩瀚宇宙中&#xff0c;性能优化始终是开发者们追求的圣杯。而在这场追求极致速度的旅程中&#xff0c;前端缓存机制无疑扮演着“时间管理大师”的角色。它像一个无形的特工队&#xff0c;在浏览器内部默默工作&#xff0c;为用户带来丝滑流畅的体验&#xff0c;同…

作者头像 李华
网站建设 2026/4/23 14:49:48

RAG技术全攻略:从检索增强生成到Agentic RAG实战指南

RAG全称Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff0c;是LLM时代重要的技术之一&#xff0c;可以简单的认为其是在传统的检索上增加了大模型生成这个要素&#xff0c;底层的检索匹配说的增强是引入了Embedding技术做向量的语义检索&#xff0c;但是严格意…

作者头像 李华
网站建设 2026/4/23 16:17:56

n ^ (n + 1) (n + 1) ^ n

n ^ (n 1) && (n 1) ^ n n的n1次方 和 n1的n次方 谁比较大

作者头像 李华
网站建设 2026/4/23 16:08:45

大数据 Cassandra 与 Elasticsearch 的整合应用

大数据 Cassandra 与 Elasticsearch 的整合应用 一、引言 在大数据处理领域&#xff0c;不同的数据库和搜索技术各有所长。Cassandra 以其高可用性、可扩展性和对海量数据的存储管理能力著称&#xff0c;而 Elasticsearch 则凭借强大的全文搜索、实时分析等功能受到青睐。将 Ca…

作者头像 李华
网站建设 2026/4/23 16:29:32

深入剖析大数据Kappa架构的元数据管理

深入剖析大数据Kappa架构的元数据管理 一、引言&#xff1a;Kappa架构的「元数据痛点」 在大数据领域&#xff0c;批流一体化早已从概念走向实践——企业不再满足于“用批处理系统处理历史数据、用流处理系统处理实时数据”的割裂方案&#xff0c;而是希望用一套系统统一处理所…

作者头像 李华