首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在编译时具有更好性能的.net代码的运行时编译

在编译时具有更好性能的.net代码的运行时编译
EN

Stack Overflow用户
提问于 2019-07-26 14:14:13
回答 1查看 373关注 0票数 0

在任何人将此标记为副本之前,请尝试了解我需要什么

我有一个在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

代码语言:javascript
复制
 `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:`
      `}`
  `}`
  `}`
EN

回答 1

Stack Overflow用户

发布于 2019-07-26 15:13:20

我们在我们的项目中确实遇到了一些类似的问题。

这个操作很慢,我们尝试了很多方法来增加吞吐量(更新Roslyn,更改选项等)。我们发现,在开始编译时会有一些开销,这与编译中隐含的代码量不是线性的。

我们的最终解决方案是到目前为止最好的(但如果有人有更好的想法,我们将不胜感激):分组编译。一次对多个文件调用编译器比对相同数量的文件多次调用要快得多。

我会在你的例子中建议:将你的所有函数分组并立即编译。当你有1000个函数时,对于单个函数来说,100ms是一件痛苦的事情,但是对于1000个函数来说,1s就足够了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57214124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档