加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – 如何最小化分配和初始化NSDateFormatter的成本?

发布时间:2020-12-14 19:27:59 所属栏目:Java 来源:网络整理
导读:我注意到使用NSDateFormatter可能相当昂贵.我发现分配和初始化对象已经消耗了很多时间. 此外,似乎在多线程中使用NSDateFormatter会增加成本.线程可以相互等待吗? 我创建了一个小的测试应用程序来说明问题.请检查一下. http://github.com/johnjohndoe/TestNS
我注意到使用NSDateFormatter可能相当昂贵.我发现分配和初始化对象已经消耗了很多时间.
此外,似乎在多线程中使用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,请在应用程序的运行开始时创建一个操作,并保持格式更改.

对于线程,每个线程都要保持一个线程,如果你真的需要(我敢打赌这是过分的 – 你的应用程序的架构是这样的,每批操作创建一个更明智的).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读