gpt4 book ai didi

multithreading - 如何最小化分配和初始化 NSDateFormatter 的成本?

转载 作者:行者123 更新时间:2023-12-03 16:05:00 24 4
gpt4 key购买 nike

我注意到使用 NSDateFormatter 的成本可能相当高。我发现分配和初始化对象已经消耗了大量时间。
此外,在多个线程中使用 NSDateFormatter 似乎会增加成本。是否存在线程必须互相等待的阻塞?

我创建了一个小型测试应用程序来说明该问题。请检查一下。

产生此类费用的原因是什么以及如何提高使用率?

<小时/>

17.12。 - 更新我的观察:我不明白为什么线程在并行处理时比按串行顺序运行时运行时间更长。仅当使用 NSDateFormatter 时才会出现时间差异。

最佳答案

注意:您的示例程序在很大程度上是一个微基准,并且非常有效地最大限度地放大了日期格式化程序的成本。您正在比较什么都不做做某事。因此,无论某物是什么,它都会显得比无物某物倍

这样的测试非常有值(value),而且极具误导性。微基准通常仅在您拥有 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 所做的任何类型的特定于语言环境的操作相关。 Cocoa 对本地化有极其彻底的支持,但这种支持是以复杂性为代价的。

看看您如何编写了一个相当出色的示例程序,您可以在 Instruments 中启动您的应用程序并尝试各种 CPU 采样工具,以了解什么消耗了 CPU 周期以及 Instruments 是如何工作的(如果您发现任何有趣的东西,更新您的问题!)。

Can there be a blocking where the threads have to wait for each other?

令我惊讶的是,当您从多个线程使用单个格式化程序时,它并没有简单地崩溃。 NSDateFormatter 没有特别提到它是线程安全的。因此,您必须假设它不是线程安全的。

How can I improve the usage?

不要创建这么多日期格式化程序!

要么保留一个用于一批操作,然后删除它,或者如果您一直使用它们,则在应用运行开始时创建一个并保留直到格式更改。

对于线程,如果确实有必要的话,请为每个线程保留一个(我敢打赌这太过分了——您的应用程序的架构使得每批操作创建一个线程会更明智)。

关于multithreading - 如何最小化分配和初始化 NSDateFormatter 的成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4442074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com