为 String.Format 生成 IL 代码的格式化程序
我一直在寻找对象格式化程序和模板程序。
http://haacked.com/archive/2009/01/ 14/named-formats-redux.aspx
我研究了 HenriFormatter,当检查性能时发现,对于同一个对象 Type 第一次调用 - 导致比下一个调用多 15 倍的时间 - 15k 刻度,第二次大约 1k。我开始挖掘,发现它使用 DataBinder.Eval,它使用反射,并且在某种程度上看起来像 Type 结构正在缓存。
与相同的 String.Format 相比,大约需要 50-100 个刻度。
所以我想知道,如果我们不使用 DataBinder.Eval,而是可以发出 String.Format 代码并缓存它,并获得 8 倍的性能,会怎么样?但在做这一切之前,我很感兴趣是否已经在任何地方做了一些事情。
I was looking for an object formatter and templater.
http://haacked.com/archive/2009/01/14/named-formats-redux.aspx
I looked into HenriFormatter and when check performance found that for the same object Type first invocation - causes 15x more time than for next - 15k ticks, second was around 1k. I become digg, and found that its using DataBinder.Eval, that uses reflection, and on some level looks like Type structure is caching.
In compare with the same String.Format that was around 50-100 ticks.
So I a wondering, what if instead of using DataBinder.Eval, we can Emit String.Format code and cache it, and get 8 times performance. But before do all this, I was interested if something was already done anywhere.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,您可以分析格式字符串并组成结果字符串。使用表达式树进行格式调用。为了进行测试,我基于 Scott Hanselmann 的解析例程进行了 POC 实现(为了简单起见,删除了自定义格式功能): 源代码。与 HenryFormatter 相比,我的处理结果如下:
well, you can analyze format string and compose result string.Format call using Expression trees. Just for the test I've made POC implementation it based on Scott Hanselmann's parsing routine (removed custom format capabilities for the simplicity): source code. On my maching results comparing to HenryFormatter were the following: