注意:您的示例程序是一個微型基準測試程序,非常有效地最大限度地放大了日期格式化程序的成本。您正在比較做什麼都不做與做點事。因此,無論是什麼東西是,它將顯示爲東西時間慢於沒有。
這樣的測試非常有價值且極具誤導性。微型基準通常只在您有真實世界的Teh Slow情況下才有用。如果您要將此基準測試速度提高10倍(實際上,您可能可以使用以下建議),但真實世界的情況只佔應用程序總體CPU時間的1%,最終結果不會是戲劇性的速度提升 - 它幾乎不會引人注目。
這樣的成本是什麼原因?
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyyMMdd HH:mm:ss.SSS"];
最有可能的,成本既不必解析/驗證日期格式字符串和做任何一種特定的語言環境是粘性物質從中確實NSDateFormatter
相關。可可對本地化提供了非常全面的支持,但這種支持的代價是複雜性。
看你如何編寫一個相當不錯的示例程序,你可以在儀器中啓動你的應用程序,並嘗試各種CPU採樣儀器,以瞭解什麼是消耗CPU週期以及儀器是如何工作的(如果你發現有趣的事情,請更新您的問題!)。
有沒有線程必須等待對方的阻塞?
我很驚訝,它不會簡單地崩潰,當你從多個線程使用單個格式化程序。 NSDateFormatter
沒有具體提及它是線程安全的。因此,你必須假設它不是線程安全的。
如何提高使用率?
不要創建如此多的日期格式化程序!
要麼保留一個操作的批處理,然後擺脫它,或者,如果您始終使用'em,請在應用程序運行的開始時創建一個並保留,直到格式更改。
對於線程,每個線程保持一個,如果你確實需要(我敢打賭這太過分了 - 你的應用程序的體系結構是這樣的,每批操作創建一個會更明智)。
,我願意給你三個點爲基準的應用程序,如果我能。那麼2,因爲iVars都帶有'm_'前綴,但是......仍然是一個很好的起點,可以深入深入w /儀器,採樣,線程等...... – bbum 2010-12-14 18:13:17