public void SetUpClass() { string cacheFolder = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Template Cache"); if (!Directory.Exists(cacheFolder)) { Directory.CreateDirectory(cacheFolder); } Cache = new FileSystemTemplateCache(cacheFolder, true, typeof(FileSystemTemplateCacheTests).Name + "_{key}.dll"); }
static void Main(string[] args) { TemplateInfo ti; try { // Referenced Assemblies List<Assembly> refAssemblies = new List<Assembly>() { typeof(Demo).Assembly }; // Globals Dictionary<string, object> globals = new Dictionary<string, object>() { { "friends", new List<Friend>() { new Friend() { Name="Samantha", Age=33 }, new Friend() { Name="Kim", Age=35 }, new Friend() { Name="Sandra", Age=22 }, new Friend() { Name="Natalie", Age=20 } } } }; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(Resources.Macros); globals.Add("xmlDoc", xmlDoc); // Inline templates Dictionary<string, string> inlineTemplates = new Dictionary<string, string>(); inlineTemplates.Add("Macros", Resources.Macros); // Speed tests Console.WriteLine("-------------------------------"); Console.WriteLine("Speed tests:"); Console.WriteLine("-------------------------------"); Stopwatch sw = new Stopwatch(); sw.Start(); int count = 200; for (int i = 0; i < count; i++) { TALCompiler.CompileTemplate(new TemplateInfo() { TemplateBody = Resources.Main, InlineTemplates = inlineTemplates }); } sw.Stop(); Console.WriteLine(string.Format("Precompile {0} templates: {1} milliseconds", count, sw.ElapsedMilliseconds)); Console.WriteLine(); // Template cache no. 1 Console.WriteLine("-------------------------------"); Console.WriteLine("[1] Initializing template cache:"); Console.WriteLine("-------------------------------"); Console.WriteLine(); string cacheFolder = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Template Cache"); Console.WriteLine(string.Format("Cache folder: {0}", cacheFolder)); if (!Directory.Exists(cacheFolder)) { Directory.CreateDirectory(cacheFolder); } FileSystemTemplateCache cache1 = new FileSystemTemplateCache(cacheFolder, true, @"Demo_{key}.dll"); // Template rendering no. 1 Console.WriteLine("-------------------------------"); Console.WriteLine("[1] Rendering template Main:"); Console.WriteLine("-------------------------------"); Console.WriteLine(Resources.Main); Console.WriteLine(); for (int i = 0; i < 2; i++) { sw.Reset(); sw.Start(); string result = cache1.RenderTemplate(Resources.Main, globals, inlineTemplates, refAssemblies, out ti); sw.Stop(); Console.WriteLine("-------------------------------"); Console.WriteLine(string.Format("[1] Result ({0}. Milliseconds: {1}):", i + 1, sw.ElapsedMilliseconds)); Console.WriteLine("-------------------------------"); Console.WriteLine(result); } // Template cache no. 2 Console.WriteLine("-------------------------------"); Console.WriteLine("[2] Initializing template cache (reusing templates):"); Console.WriteLine("-------------------------------"); FileSystemTemplateCache cache2 = new FileSystemTemplateCache(cacheFolder, false, @"Demo_{key}.dll"); // Template rendering no. 2 for (int i = 0; i < 2; i++) { sw.Reset(); sw.Start(); string result = cache2.RenderTemplate(Resources.Main, globals, inlineTemplates, refAssemblies, out ti); sw.Stop(); Console.WriteLine("-------------------------------"); Console.WriteLine(string.Format("[2] Result ({0}. Milliseconds: {1}):", i + 1, sw.ElapsedMilliseconds)); Console.WriteLine("-------------------------------"); Console.WriteLine(result); } // In-memory Template cache Console.WriteLine("--------------------------------------------"); Console.WriteLine("[mem] Initializing in-memory template cache:"); Console.WriteLine("--------------------------------------------"); MemoryTemplateCache cache3 = new MemoryTemplateCache(); // In-memory Template rendering for (int i = 0; i < 2; i++) { sw.Reset(); sw.Start(); string result = cache3.RenderTemplate(Resources.Main, globals, inlineTemplates, refAssemblies, out ti); sw.Stop(); Console.WriteLine("-------------------------------"); Console.WriteLine(string.Format("[mem] Result ({0}. Milliseconds: {1}):", i + 1, sw.ElapsedMilliseconds)); Console.WriteLine("-------------------------------"); Console.WriteLine(result); } } catch (TemplateParseException ex) { Console.WriteLine(""); Console.WriteLine("-------------------------------"); Console.WriteLine(ex.Message); Console.WriteLine("-------------------------------"); } catch (CompileSourceException ex) { Console.WriteLine(""); Console.WriteLine("-------------------------------"); Console.WriteLine(ex.Message); Console.WriteLine("-------------------------------"); } catch (RenderTemplateException ex) { Console.WriteLine(""); Console.WriteLine("-------------------------------"); Console.WriteLine(ex.Message); Console.WriteLine("-------------------------------"); } catch (Exception ex) { Console.WriteLine(""); Console.WriteLine("-------------------------------"); Console.WriteLine(ex.Message); Console.WriteLine("-------------------------------"); } Console.WriteLine(""); Console.WriteLine("Press any key ..."); Console.ReadKey(); }
static void Main() { // Referenced Assemblies var refAssemblies = new List <Assembly> { typeof(Demo).Assembly }; // Globals var globals = new Dictionary <string, object> { { "friends", new List <Friend> { new Friend { Name = "Samantha", Age = 33 }, new Friend { Name = "Kim", Age = 35 }, new Friend { Name = "Sandra", Age = 22 }, new Friend { Name = "Natalie", Age = 20 } } } }; var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(Resources.Macros); globals.Add("xmlDocsList", new XmlDocumentList { xmlDoc }); globals.Add("xmlDocsDictRecursive", new XmlDocumentDictRecursive { { xmlDoc, new XmlDocumentDictRecursive { { xmlDoc, null } } } }); globals.Add("xmlDocsDictListTuple", new Dictionary <XmlDocument, List <Tuple <string, string> > > { { xmlDoc, new List <Tuple <string, string> > { new Tuple <string, string>("a", "b") } } }); // Globals types var globalsTypes = new Dictionary <string, Type>(); foreach (var kw in globals) { globalsTypes.Add(kw.Key, kw.Value.GetType()); } try { var sw = new Stopwatch(); // Basic test Console.WriteLine("Basic tests:"); Console.WriteLine("======================================="); sw.Start(); Console.WriteLine(new Template("Hello ${w}!").Render(new Dictionary <string, object> { { "w", "world" } })); sw.Stop(); Console.WriteLine("{0} ms", sw.ElapsedMilliseconds); // Template program generator speed tests Console.WriteLine(); Console.WriteLine("Template program generator speed tests:"); Console.WriteLine("======================================="); sw.Reset(); sw.Start(); var programGenerator = new ProgramGenerator(); for (int i = 0; i < 5; i++) { sw.Reset(); sw.Start(); var ti = new TemplateInfo { TemplateBody = Resources.Main, GlobalsTypes = globalsTypes, ReferencedAssemblies = refAssemblies }; programGenerator.GenerateTemplateProgram(ref ti); sw.Stop(); Console.WriteLine("{0}: {1} ms", i + 1, sw.ElapsedMilliseconds); } sw.Stop(); // Template generation speed tests Console.WriteLine(); Console.WriteLine("Template compilation speed tests:"); Console.WriteLine("================================="); var template = new Template(Resources.Main, globalsTypes, refAssemblies); for (int i = 0; i < 5; i++) { sw.Reset(); sw.Start(); template.Compile(); sw.Stop(); Console.WriteLine("{0}: {1} ms", i + 1, sw.ElapsedMilliseconds); } // FS Template cache no. 1 Console.WriteLine(); Console.WriteLine("FS template cache no.1"); Console.WriteLine("======================"); string cacheFolder = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Template Cache"); if (!Directory.Exists(cacheFolder)) { Directory.CreateDirectory(cacheFolder); } var cache1 = new FileSystemTemplateCache(cacheFolder, true, @"Demo_{key}.dll"); template.TemplateCache = cache1; string result = ""; for (int i = 0; i < 5; i++) { sw.Reset(); sw.Start(); result = template.Render(globals); sw.Stop(); Console.WriteLine("{0}: {1} ms", i + 1, sw.ElapsedMilliseconds); } Console.WriteLine(); // FS Template cache no. 2 Console.WriteLine(); Console.WriteLine("FS template cache no.2 (loading generated templates):"); Console.WriteLine("====================================================="); var cache2 = new FileSystemTemplateCache(cacheFolder, false, @"Demo_{key}.dll"); template.TemplateCache = cache2; for (int i = 0; i < 5; i++) { sw.Reset(); sw.Start(); template.Render(globals); sw.Stop(); Console.WriteLine("{0}: {1} ms", i + 1, sw.ElapsedMilliseconds); } // Memory Template cache Console.WriteLine(); Console.WriteLine("Memory template cache:"); Console.WriteLine("======================"); var cache3 = new MemoryTemplateCache(); template.TemplateCache = cache3; for (int i = 0; i < 5; i++) { sw.Reset(); sw.Start(); template.Render(globals); sw.Stop(); Console.WriteLine("{0}: {1} ms", i + 1, sw.ElapsedMilliseconds); } Console.WriteLine(); Console.WriteLine("Render result:"); Console.WriteLine("=============="); Console.WriteLine(result); } catch (TemplateParseException ex) { Console.WriteLine(""); Console.WriteLine("-------------------------------"); Console.WriteLine(ex.Message); Console.WriteLine("-------------------------------"); } catch (CompileSourceException ex) { Console.WriteLine(""); Console.WriteLine("-------------------------------"); Console.WriteLine(ex.Message); Console.WriteLine("-------------------------------"); } catch (RenderTemplateException ex) { Console.WriteLine(""); Console.WriteLine("-------------------------------"); Console.WriteLine(ex.Message); Console.WriteLine("-------------------------------"); } catch (Exception ex) { Console.WriteLine(""); Console.WriteLine("-------------------------------"); Console.WriteLine(ex.Message); Console.WriteLine("-------------------------------"); } Console.WriteLine(""); Console.WriteLine("Press any key ..."); Console.ReadKey(); }