Skip to content

Instantly share code, notes, and snippets.

@takepara
Created April 13, 2015 06:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takepara/3715568c07817128011f to your computer and use it in GitHub Desktop.
Save takepara/3715568c07817128011f to your computer and use it in GitHub Desktop.
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using RazorEngine.Configuration;
using RazorEngine.Roslyn;
using RazorEngine.Templating;
namespace RoslynPerformance
{
class Program
{
static string CodeDomRender(IRazorEngineService razor, int key)
{
var template = "Hello @Model.Name, welcome to RazorEngine!";
var templateKey = "CodeDOM" + key;
var result = razor.RunCompile(template, templateKey, null, new { Name = templateKey });
return result;
}
static string RoslynRender(IRazorEngineService razor, int key)
{
var template = "Hello @Model.Name, welcome to RazorEngine!";
var templateKey = "Roslyn" + key;
var result = razor.RunCompile(template, templateKey, null, new { Name = templateKey });
return result;
}
static void Do(IRazorEngineService razor, Action<IRazorEngineService, int> render, int count = 50)
{
var stopWatch = new Stopwatch();
stopWatch.Start();
for (var i = 0; i < count; i++)
{
render(razor, i);
Console.Write(".");
}
stopWatch.Stop();
Console.WriteLine();
Console.WriteLine("render elapse : {0} ms", stopWatch.ElapsedMilliseconds);
}
static void Cleanup()
{
var temp = Path.GetTempPath();
var dirs = Directory.GetDirectories(temp, "RazorEngine_*").ToList();
dirs.ForEach(dir => Directory.Delete(dir, true));
}
static void Main(string[] args)
{
Console.WriteLine("wait push any key.");
Console.ReadKey();
Console.WriteLine("cleanup.");
Cleanup();
using (var cachingProvider = new DefaultCachingProvider(t => { }))
{
var codedomConfig = new TemplateServiceConfiguration
{
CachingProvider = cachingProvider
};
var roslynConfig = new TemplateServiceConfiguration
{
CompilerServiceFactory = new RoslynCompilerServiceFactory(),
CachingProvider = cachingProvider
};
using (var codedom = RazorEngineService.Create(codedomConfig))
using (var roslyn = RazorEngineService.Create(roslynConfig))
{
Console.WriteLine("warm up.");
CodeDomRender(codedom, -1);
RoslynRender(roslyn, -1);
Console.WriteLine("do codedom");
Do(codedom, (razor, count) => CodeDomRender(razor, count));
Console.WriteLine("do roslyn");
Do(roslyn, (razor, count) => RoslynRender(razor, count));
}
};
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment