在任何人将此标记为副本之前,请尝试了解我需要什么
我有一个在C# ASP.NET MVC5中创建的软件,用户可以创建任何公式,基本上if..Else,开关条件,其中可能包括一些自定义函数也从我的自定义动态链接库,其中包括datediff,DatePart。
因此,对于这个场景,我们在MSScriptControl的帮助下使用了VBScript,但我们决定使用C#,就像公式的语法一样。
我已经探索了很像CodeDom和罗斯林,但问题是它几乎需要平均130毫秒编译10行代码。后来我也尝试实现了CS-Script,它比上面两个慢得多,因为它内部使用了CodeDOM,Roslyn,MONO作为编译器选项。
现在我正在寻找的是VBScript的替代,它几乎需要11毫秒的编译和执行时间。
对于这种情况,请向我推荐任何其他方式或工具。
How to improve compile time using CSharpCodeProvider
`using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;`
`namespace abc
{
public class Abc
{
static void Main()
{
var code = @"
using System;
namespace First
{
public class program
{
public static int Main()
{
if(Convert.ToDateTime(""01-04-2019
10:25:00"")>Convert.ToDateTime(""01-04-2019 15:00:00""))
{
return 1;
}
else
{
return 0;
}
}
}
}";
Console.WriteLine(code);
var options = new CompilerParameters();
options.GenerateExecutable = false;
options.GenerateInMemory = false;
var provider = new CSharpCodeProvider();
var compile = provider.CompileAssemblyFromSource(options, code);
var type = compile.CompiledAssembly.GetType("First.program");
var abc = Activator.CreateInstance(type);`
`var method = type.GetMethod("Main");
var result = method.Invoke(abc, null);`
`Console.WriteLine(result); //output:`
`}`
`}`
`}`发布于 2019-07-26 15:13:20
我们在我们的项目中确实遇到了一些类似的问题。
这个操作很慢,我们尝试了很多方法来增加吞吐量(更新Roslyn,更改选项等)。我们发现,在开始编译时会有一些开销,这与编译中隐含的代码量不是线性的。
我们的最终解决方案是到目前为止最好的(但如果有人有更好的想法,我们将不胜感激):分组编译。一次对多个文件调用编译器比对相同数量的文件多次调用要快得多。
我会在你的例子中建议:将你的所有函数分组并立即编译。当你有1000个函数时,对于单个函数来说,100ms是一件痛苦的事情,但是对于1000个函数来说,1s就足够了。
https://stackoverflow.com/questions/57214124
复制相似问题