zoukankan      html  css  js  c++  java
  • RazorEngine性能研究(反射的延深)

    先说下结论
    1)RazorEngine 确实很慢,编译过程特别慢,编译过后仍不适合大量重复调用的情况(一次调用可以接受)。
    2 )   RazorEngine 和 asp.net mvc 里的Razor 的关系目前不清楚,所以这里的结论不代表asp.net mvc慢。
    3).net 4.6里的反射性能较.net 2.0 略有提升,大概反射赋值的性能由原生赋值的1/5 提升到1/4。

    这里测试RazorEngine时,实现了一个对象属性赋值器:
    1. using System.Diagnostics;
    2. using RazorEngine;
    3. using RazorEngine.Templating;
    1. //脚本化的C#想写对还是有点麻烦的,还好Razor能给出有用的错误信息。
    2. public class RazorPropertySetter<TEntity> where TEntity :class
    3. {
    4. string PropertyName;
    5. bool Inited = false;
    6. private RazorPropertySetter(){ }
    7. public static RazorPropertySetter<TEntity> Create( string propertyName)
    8. {
    9. RazorPropertySetter<TEntity> rs = new RazorPropertySetter<TEntity>();
    10. rs.PropertyName = propertyName;
    11. return rs;
    12. }
    13. public void Set(TEntity entity , object value)
    14. {
    15. string cacheKey = entity.GetType().FullName + "--" + this.PropertyName;
    16. DynamicViewBag viewBag = new DynamicViewBag();
    17. viewBag.AddValue("PropertyValue", value);
    18. if (Inited == false)
    19. {
    20. string template = "@{Model."+PropertyName+ "= ViewBag.PropertyValue;}";
    21. Engine.Razor.RunCompile(template, cacheKey, typeof(TEntity), entity,viewBag);
    22. Inited = true;
    23. }
    24. else
    25. {
    26. Engine.Razor.Run(cacheKey, typeof(TEntity), entity, viewBag);
    27. }
    28. }
    29. }
    1. //测试用类
    2. public class TestData
    3. {
    4. public string Title { get; set; }
    5. }
    1. //测试代码
    2. TestData data = new TestData();
    3. data.Title = "V1";
    4. RazorPropertySetter<TestData> setTitle = RazorPropertySetter<TestData>.Create("Title");
    5. Stopwatch watch = new Stopwatch();
    6. watch.Start();
    7. setTitle.Set(data, "V00");
    8. watch.Stop();
    性能测试结果:


    有时间的时候再研究下Script.net的性能。




  • 相关阅读:
    Algs4-1.3链表实现泛型可迭代Stack
    Algs4-1.3链表实现科泛型可迭代Bag
    Algs4-1.3链表实现不定容泛型Queue不支持迭代
    Algs4-1.3不定容数组实现泛型栈支持迭代
    Algs4-1.3链表实现不定容泛型Stack不支持迭代
    Algs4-1.3不定容泛型栈(不可迭代)
    Algs4-1.3定容字符串栈
    Algs4-1.3定容泛型栈
    Algs4-1.3E.W.Dijkstra双栈算术表达式求值算法
    Algs4-1.2(非习题)可视化累加器
  • 原文地址:https://www.cnblogs.com/ybst/p/5087832.html
Copyright © 2011-2022 走看看