我正在使用roslyn ScriptingAPI抛出异常说:
内存不足,无法继续执行程序
逐个编译多个字符串脚本时,如下所示:
foreach (string script in scripts)
{
var evalFunc = CSharpScript.Create(script, roslynOptions, typeof(ParamsVM));
evalFunc.Compile();
cachedScripts.Add(rule.Formula,evalFunc);
}
我以为我可以保存所有已编译的脚本以便以后在数千个数据项中使用它们,但由于这种节省,内存达到~4GB。
如果我按需使用每个脚本(稍后当我迭代数据项时),那么每个脚本将被反复编译。
这种用例的解决方案是什么?
答案 0 :(得分:0)
我摆脱了使用Roslyn Scripting API
来评估我的脚本的想法
我开始使用Microsoft.CSharp.CSharpCodeProvider
,我遍历所有脚本并形成(作为字符串)一个完整的类(包含所有using
部分和namespace
)然后我编译它(认为它是缓存)所以在那之后我可以通过反映我已编译的程序集来动态调用方法,并将它所需的参数传递给它。