我在儀器中運行時間分析器。我儘可能簡化了代碼,將所有事情都歸結爲一個確切的問題。循環內有一行代碼checkInString = [_ formatter stringFromDate:[checkInArrayCopy objectAtIndex:i]];正在佔用90%的處理時間。關於如何優化此代碼的任何想法?優化此循環
NSDateFormatter *format = [[NSDateFormatter alloc]init];
[format setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[format setDateFormat:@"MM/dd/YYYY"];
NSString *checkInString;
for (int x=0; x<100; x++) {
for (int i=0; i<checkInArray.count; i++) { //CheckInArray is a NSMutableArray of NSDates, with about 100 objects inside
checkInString =[_formatter stringFromDate:[checkInArray objectAtIndex:i]]; //**90% of processing time
}
}
雖然您可能無法優化日期格式化程序(如果有的話),但是如果使用'NSSet'中的不同日期集合來減少循環次數,您可能會稍微減輕一些循環次數,具體取決於是否不是你正在使用分鐘/秒/毫秒。所以,如果你能夠將這些日期壓縮到一半,那麼你就需要更少的時間格式化。 – Jeremy 2013-02-08 18:32:35
我想你可能可以使用GCD創建一個多線程版本的代碼 - 代碼似乎非常適合多線程。這可以提高某些平臺的性能。 – 2013-02-08 19:19:00
假設這些內容已排序,並且您重複使用同一日期,緩存最近格式化的日期可能會加速很多事情。 – escrafford 2013-02-08 19:24:13