2010-09-07 48 views
1

我正在尋找一個對象格式化程序和模板。Formatter爲String.Format生成IL代碼

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

我看着HenriFormatter和檢查時的表現發現,同一對象類型第一次調用 - 造成15倍比下一個更長的時間 - 15K蜱,第二次是1K左右。我變成了digg,並發現它使用DataBinder.Eval,它使用反射,並且在某個級別上看起來像Type結構是緩存。

與大約50-100個滴答聲的相同String.Format進行比較。

所以我想知道,如果不是使用DataBinder.Eval,我們可以發出String.Format代碼並緩存它,並獲得8倍的性能。但在做這一切之前,我感興趣的是如果某件事已經在任何地方完成了。

回答

1

好吧,您可以使用表達式樹分析格式字符串並撰寫結果字符串格式。僅僅爲了測試,我已經基於Scott Hanselmann的解析例程(爲簡單起見刪除了自定義格式功能)來實現POC:source code。在我MACHING結果比較HenryFormatter有以下幾條:學生型

實例:名稱=約翰, [email protected]和 生日= 3 /一分之二十983 12:00:00 AM 實例學生類型的:名稱=約翰, [email protected]和 出生日期= 3 /一分之二十983 12:00:00 AM HenriFormat:平均運行時間 500000運行= 00:00:00.0000045 StructureToString:平均運行時間 for 500000 runs = 00:00:00.0000003