在Objective-C中对特定方法进行基准测试

3

我有一个在Objective-C应用程序中至关重要的方法,我需要尽可能地进行优化。首先,我需要对这个单一的方法进行一些简单的基准测试,以便在优化过程中比较我的进展。

最简单的方法是如何跟踪给定方法的执行时间(例如以毫秒为单位),并将其打印到控制台上。

4个回答

3

CFAbsoluteTimeGetCurrent()(大约6微秒)或来自mach/mach_time.h的mach_absolute_time()(速度略快,但需要调用mach_timebase_info()并进行一些转换)。然后,您可以打印到stdout或使用NSLog;请注意,NSLog需要很长时间(50毫秒?),因此您要在测量之后进行。stdout可能会快一点,但不会进入syslog(即Xcode Organizer/iPhone Configuration Utility控制台)。


2

其他人没有提到的一件事......当您使用Instruments或Shark进行性能检查时,请在设备上运行应用程序,而不是模拟器。对于许多事情,设备比模拟器慢得多,但有时对于某些硬件加速的事物实际上会更快,而模拟器则不会,因此在设备上进行检查是获取准确图片的唯一方法。

此外,请注意NSLogs可能会使其速度变慢很多


+1 NSLog 应该仅用于包含相同数量 NSLog 语句的代码段之间的相对测量。 - TechZen
如果我编译一个带有NSLogs的应用程序,即使我没有在进行调试,NSLogs仍然会执行吗? - M. Ryan
@Jasconius - 是的,它们仍将输出到终端。 - DenverCoder9

1

有很多方法可以为您的代码添加仪器,但是通过Instruments和/或Shark运行它应该足以提供足够的信息,以查看您的代码在哪里变慢。但请记住,过早地进行优化是万恶之源。


-1

我找到了一个可以给我累计CPU时间的地方,但是每次调用这个方法的执行时间差别很大,所以我需要有一个按调用分解的情况,但是我找不到。能帮忙一下吗? - M. Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接