那么我现在已经比较了Mono.CSharp
和Microsoft.CSharp
,结果就是Mono的版本比较糟糕。
我编译下面的代码与两个动态编译器:
using System;
using CompilerServiceTest;
public class LalaDynamicImpl : ILala
{
private static int _counter;
public void DoLala()
{
_counter++;
}
}
主要程序会沿着线的东西:
public interface ILala
{
void DoLala();
}
public class LalaStaticImpl : ILala
{
private static int _counter;
public void DoLala()
{
_counter++;
}
}
public class Program
{
public static void Main(string[] args)
{
Message("Compiling dynamic lala...");
var lala = BuildDynamicLala();
Message("Testing dynamic lala...");
Test(lala);
Message("Sleeping for 1s...");
GC.Collect();
Thread.Sleep(1000);
Message("Testing static lala...");
Test(new LalaStaticImpl());
}
private static void Test(ILala lala)
{
var watch = Stopwatch.StartNew();
for (var i = 0; i < 1000000000; i++)
lala.DoLala();
Console.WriteLine(watch.Elapsed);
}
}
在我的机器的结果是:
- 静态编译的类:1.9s
- 动态编译类编译
Microsoft.CSharp
:1.9s
- 动态编译类编译
Mono.CSharp
:10S
结果与对应什么Mono团队提到here什么马立克萨法尔提到在他的answser - Microsoft.CSharp
编译器服务是实际编译器的包装器,代码按照与正常代码相同的方式进行编译和优化。 Mono.Csharp
编译器服务与Mono编译器分开,更像是一个“eval”机器。它不像标准编译器那样优化代码。
基本上它看来,单声道编译器服务是不是真的用于性能关键场景,但对于丰富的功能,学习,测试等
测试了Windows 7的64位计算机上使用.NET 4.0( VS 2010)和Mono 3.2.3。
@nvoigt,我不认为它是重复的,因为你提供的链接的标题是误导性的,并不是真正的问题。 –
这不是重复的,我对标题不太了解。查看我的更新。 –
@AmirAbiri哦,好的,这清除了它。 – nvoigt