Here is a small comparison between the new Roselyn CTP compiler from Microsoft
(http://www.microsoft.com/en-us/download/details.aspx?id=27746)
and the native C# compiler which is integrated into .NET.
Here is the code used for testing compilation between the "two" compilers:
static class Program
{
static void Main()
{
int pass = 50;
List<long> rList = new List<long>();
List<long> oList = new List<long>();
for (int i = 1; i < pass; i++)
{
long roselynVal = TestRoselyn();
long oldVal = TestOld();
rList.Add(roselynVal);
oList.Add(oldVal);
Console.WriteLine("Roselyn Pass " + i + ": " + roselynVal.ToString() +
"\t\tOld Microsoft compiler Pass " + i + ": " + oldVal.ToString());
}
var rosleynAvg = rList.Average();
var oldAvg = oList.Average();
Console.WriteLine("Roselyn average ms:\t" + rosleynAvg);
Console.WriteLine("Microsoft old compiler average ms:\t" + oldAvg);
Console.ReadKey();
}
private static long TestRoselyn()
{
Stopwatch sw = new Stopwatch();
sw.Start();
var engine = new ScriptEngine();
var result = engine.Execute<bool>("var x = 10; x == 10");
sw.Stop();
return sw.ElapsedMilliseconds;
}
private static long TestOld()
{
Stopwatch sw2 = new Stopwatch();
sw2.Start();
Microsoft.CSharp.CSharpCodeProvider cp = new CSharpCodeProvider();
CompilerParameters cparam = new CompilerParameters { GenerateInMemory = true };
CompilerResults cr = cp.CompileAssemblyFromSource(cparam,
"namespace RoselynTemplate { class Main { public bool " +
"GetSmt() { var x = 10; return x == 10; } }}");
var instance = cr.CompiledAssembly.CreateInstance("RoselynTemplate.Main");
var method = instance.GetType().GetMethod("GetSmt");
object res = method.Invoke(instance, null);
sw2.Stop();
return sw2.ElapsedMilliseconds;
}
}
And here are the test results:
Considering code execution, it seems that Roselyn uses some kind of caching mechanism, also I need to mention that every time at “Pass 1”
the old Microsoft compiler has beaten Roselyn by 6-7ms which I presume is spent on caching and other operations.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.