此外,似乎在多线程中使用NSDateFormatter会增加成本.线程可以相互等待吗?
我创建了一个小的测试应用程序来说明问题.请检查一下.
> http://github.com/johnjohndoe/TestNSDateFormatter
> git://github.com/johnjohndoe/TestNSDateFormatter.git
这些费用的原因是什么,如何改善使用?
17,12. – 更新我的观察:我不明白为什么与串行顺序运行时相比,线程运行时间更长.时差仅在使用NSDateFormatter时发生.
解决方法
这些测试是非常有价值的,非常误导.微型基准测试通常只有在您有真实世界的Teh Slow的情况下才有用.如果你把这个基准值提高10倍(实际上你可能可以用下面的建议),但是现实世界的情况只是你应用程序使用的总cpu时间的1%,最终的结果是不会戏剧性的速度提高 – 几乎不显眼.
What is the reason for such costs?
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyyMMdd HH:mm:ss.SSS"];
很可能,成本与解析/验证日期格式字符串并且必须执行NSDateFormatter执行的任何类型的区域设置特定的goop相关联. Cocoa对本地化具有非常彻底的支持,但是这种支持的成本是复杂的.
看到如何写一个相当棒的示例程序,您可以在仪器中启动应用程序,并尝试各种cpu采样仪器,以了解什么是消耗cpu周期以及仪器的工作原理(如果您发现有趣的话,请更新您的问题! ).
Can there be a blocking where the threads have to wait for each other?
我很惊讶,当您使用多个线程的单个格式化程序时,它不会简单崩溃. NSDateFormatter没有特别提到它是线程安全的.因此,您必须假定它不是线程安全的.
How can I improve the usage?
不要创建这么多日期格式化程序!
或者保留一批操作,然后将其删除,或者如果您始终使用em,请在应用程序的运行开始时创建一个操作,并保持格式更改.
对于线程,每个线程都要保持一个线程,如果你真的需要(我敢打赌这是过分的 – 你的应用程序的架构是这样的,每批操作创建一个更明智的).