Esempio n. 1
0
        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();
        }
Esempio n. 2
0
 public void SetUpClass()
 {
     Cache = new MemoryTemplateCache();
 }
Esempio n. 3
0
        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();
        }