先说下结论

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

RazorEngine性能研究(反射的延深)的更多相关文章

  1. 2019-11-29-C#-性能分析-反射-VS-配置文件-VS-预编译

    原文:2019-11-29-C#-性能分析-反射-VS-配置文件-VS-预编译 title author date CreateTime categories C# 性能分析 反射 VS 配置文件 V ...

  2. 2019-8-31-C#-性能分析-反射-VS-配置文件-VS-预编译

    title author date CreateTime categories C# 性能分析 反射 VS 配置文件 VS 预编译 lindexi 2019-08-31 16:55:58 +0800 ...

  3. C# 性能分析 反射 VS 配置文件 VS 预编译

    本文分析在 C# 中使用反射和配置文件和预编译做注入的性能,本文的数据是为预编译框架,开发高性能应用 - 课程 - 微软技术暨生态大会 2018 - walterlv提供 本文通过代码生成工具,使用C ...

  4. DataReader类型化数据读取与装箱性能研究

    前言 在各种ORM框架或者SQL映射框架(例如MyBatis,SOD框架之SQL-MAP功能)中,都有将查询的结果映射为内存对象的需求,包括映射到实体类.简单类型(例如Java的POJO,.NET的P ...

  5. HBase学习笔记-HBase性能研究(1)

    使用Java API与HBase集群交互时,需要构建HTable对象,使用该对象提供的方法来进行插入/删除/查询等操作.要创建HTable对象,首先要创建一个带有HBase集群信息的配置对象Confi ...

  6. Linux性能研究(总)

    http://www.vpsee.com/2009/11/linux-system-performance-monitoring-introduction/ http://www.jb51.net/L ...

  7. MYSQL开发性能研究——INSERT,REPLACE,INSERT-UPDATE性能比较

    一.为什么要有这个实验 我们的系统是批处理系统,类似于管道的架构.而各个数据表就是管道的两端,而我们的程序就类似于管道本身.我们所需要做的事情无非就是从A表抽取数据,经过一定过滤.汇总等操作放置到B表 ...

  8. MYSQL开发性能研究——批量插入的优化措施

    一.我们遇到了什么问题 在标准SQL里面,我们通常会写下如下的SQL insert语句. INSERT INTO TBL_TEST (id) VALUES(1);   很显然,在MYSQL中,这样的方 ...

  9. Go-For Range 性能研究

    文章转载地址:https://www.flysnow.org/2018/10/20/golang-for-range-slice-map.html 如果我们要遍历某个数组,Map 集合.Slice 切 ...

随机推荐

  1. SlidingMenu官方实例分析6——ResponsiveUIActivity

    ResponsiveUIActivity 这个类实现的是一个响应适UI设计重点是布局的设计: layout布局如下: layout-large-land布局如下: layout-xlarge布局如下: ...

  2. iOS --提取本地<通讯录>数据 <1>

    #pragma mark - 获取手机所有联系人 - (void)obtainPhoneAllContact { //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录 ; //声明一个通讯簿 ...

  3. hihocoder 1279(状压)

    坑爹的题目.不过不能说不是一道挺好的题目. 坑主要坑在,妹的我一样的复杂度,写的姿势略差了点然后就一直超时. 比赛的时候我还直接就看错题目,把AND运算看成了OR...还敲完交了一发. 这题很容易想到 ...

  4. POJ3090

    Visible Lattice Points Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7094   Accepted: ...

  5. 《从零开始学Swift》学习笔记(Day 16)——字典集合

    原创文章,欢迎转载.转载请注明:关东升的博客        Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合 ...

  6. mysql导出csv文件

    SELECT * FROM (select 'id','url','大分类','分类','贴吧名称','关注用户数','帖子数量','简介','帖子名称','楼主ID','发表时间','采集时间',' ...

  7. EasyNVR智能云终端硬件使用说明(EasyNVR无插件直播服务硬件的具体使用方法)

    问题背景 随着EasyNVR硬件版本(EasyNVR硬件云终端)的发布不少客户选择了EasyNVR云终端作为产品选择,在客户收到EasyNVR云终端的时候肯定都有一个疑问,那就是如何使用手头上的这个小 ...

  8. mailing list的原理

    1 发往mailing list邮箱的邮件会被所有订阅了该邮箱的人收到 说白了,就是一种邮件群发机制,为了简化群发,不是将所有的收件人放到收件人列表中,而是发往总的邮箱即可. 2 要向该mailing ...

  9. Unity字体文件放Resources和打成ab对比

    情况一:公共字体打成ab的时候,加载A界面的时候加载了font的ab,卸载A和font的ab后,接着加载B界面,加载了font的ab,卸载B和font的ab,这时候字体对应的asset会在内存里有两份 ...

  10. selenium 下载文件设置下载路径

    Chrome 文件下载 Chrome浏览器类似,设置其options: download.default_directory:设置下载路径 profile.default_content_settin ...