RazorEngine性能研究(反射的延深)

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

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


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


相关文章
相关标签/搜索