• 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的性能。




  • 相关阅读:
    Linux strace 命令 说明
    存储区域网(SANStorage Area Network)
    RAC 中 ASM 实例名 与 节点的对应关系
    光纤通道(FC: Fibre Channel)
    Oracle expdp/impdp 使用示例
    RAC 中 ASM 实例名 与 节点的对应关系
    RAC 修改 DB 实例名 步骤
    InfiniBand 网络
    ORA09817: Write to audit file failed 解决方法
    RAC 安装patch 后启动实例 报错 ORA00439 feature not enabled Real Application Clusters 解决方法
  • 原文地址:https://www.cnblogs.com/ybst/p/5087832.html
Copyright © 2020-2023  润新知