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


相關文章
相關標籤/搜索