格式化程序,为String.Format生成IL代码

时间:2010-09-07 14:13:33

标签: c# templates reflection reflection.emit

我正在寻找对象格式化程序和模板。

http://haacked.com/archive/2009/01/14/named-formats-redux.aspx

我查看了HenriFormatter,当检查性能发现同一对象类型第一次调用时 - 导致时间比下一次多15倍 - 15k滴答,第二次约为1k。我成了digg,发现它使用DataBinder.Eval,它使用反射,并且在某种程度上看起来像Type结构是缓存。

与相同的String.Format进行比较,大约为50-100个刻度。

所以我想知道,如果不使用DataBinder.Eval,我们可以发出String.Format代码并缓存它,并获得8倍的性能。但在此之前,我感兴趣的是,如果已经在任何地方完成了某些事情。

1 个答案:

答案 0 :(得分:1)

好吧,您可以使用表达式树分析格式字符串并撰写结果字符串。格式化调用。仅仅为了测试,我已经基于Scott Hanselmann的解析例程(为了简单而删除了自定义格式功能)进行了POC实现:source code。与HenryFormatter相比,我的加工结果如下:

  

学生类型实例:姓名=约翰,   Email =john@roffle.edu和   birthdate = 3/20/1 983 12:00:00 AM   学生类型实例:姓名=约翰,   Email =john@roffle.edu和   birthdate = 3/20/1 983 12:00:00 AM   HenriFormat:平均运行时间   500000次运行= 00:00:00.0000045   StructureToString:平均运行时间   500000次运行= 00:00:00.0000003