- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在 iOS 上优化一个函数(FFT),并且我已经设置了一个测试程序来计算它在数百次调用中的执行时间。我在函数调用前后使用 mach_absolute_time() 来计时。我正在运行 iOS 6 的第四代 iPod touch 上进行测试。
大多数计时结果彼此大致一致,但有时一次运行会比其他运行时间长得多(长 100 倍)。
我很确定这与我的实际功能无关。每次运行都有相同的输入数据,并且是纯数值计算(即没有系统调用或内存分配)。如果我用一个空的 for 循环替换 FFT,我也可以重现这一点。
有没有其他人注意到这样的事情?
我目前的猜测是我的应用程序的线程以某种方式被操作系统中断了。如果是这样,有什么办法可以防止这种情况发生? (这不是将在 App Store 上发布的应用程序,因此非公开 API 也可以。)
我不再拥有 iOS 5.x 设备,但我很确定在更新到 iOS 6 之前不会发生这种情况。
编辑:这是一种更简单的重现方法:
for (int i = 0; i < 1000; ++i)
{
uint64_t start = mach_absolute_time();
for (int j = 0; j < 1000000; ++j);
uint64_t stop = mach_absolute_time();
printf("%llu\n", stop-start);
}
在调试中编译它(因此 for 循环没有被优化掉)并运行;大多数值都在 220000 左右,但偶尔会有 10 倍或更多的值。
最佳答案
根据我的经验,mach_absolute_time 并不可靠。现在我改用 CFAbsoluteTime。它以秒为单位返回当前时间,精度比秒高得多。
const CFAbsoluteTime newTime = CFAbsoluteTimeGetCurrent();
关于ios - 来自 mach_absolute_time() 的不稳定计时结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12775645/
关于 Darwin,POSIX 标准 clock_gettime(CLOCK_MONOTONIC)定时器不可用。相反,最高分辨率的单调定时器是通过 mach_absolute_time 获得的。来自
我正在尝试在 iOS 上优化一个函数(FFT),并且我已经设置了一个测试程序来计算它在数百次调用中的执行时间。我在函数调用前后使用 mach_absolute_time() 来计时。我正在运行 iOS
我使用此代码来跟踪上次重新启动: + (float) secondsSinceLastReboot{ return ((float)(mach_absolute_time())) * ((f
我的 iOS 应用程序需要一个始终与我的服务器时钟同步的自定义时钟。所有的同步逻辑都完成了。 我的时钟基于 mach_absolute_time(),您可以从中计算自设备启动以来耗时。问题是当设备进入
我正在为 OS X (Obj-C/Cocoa) 编写一个应用程序,它运行模拟并向用户显示结果。在一种情况下,我希望模拟“实时”运行,以便用户可以观看它以与现实生活中相同的速度运行。模拟以特定时间步长
我的应用程序使用 mach_absolute_time 计算自上次触摸事件以来的滴答声,并在超过 10 分钟的空闲时间限制时将用户注销。 这在 iOS 6 上一切正常,但我注意到它在 iOS 7 上表
我是一名优秀的程序员,十分优秀!