我正在尝试将一些性能统计信息添加到我的 iPhone 应用程序的方法调用中。我使用以下方法来查找处理时间:
#define TICK NSDate *startTime = [NSDate date]
#define TOCK NSLog(@"Time to process: %f", -[startTime timeIntervalSinceNow])
是否有类似的策略来测量方法调用的 CPU 和内存使用情况?
我正在尝试将一些性能统计信息添加到我的 iPhone 应用程序的方法调用中。我使用以下方法来查找处理时间:
#define TICK NSDate *startTime = [NSDate date]
#define TOCK NSLog(@"Time to process: %f", -[startTime timeIntervalSinceNow])
是否有类似的策略来测量方法调用的 CPU 和内存使用情况?
用于Instruments
检查应用的性能。苹果做得相当不错,所以没有必要重新发明轮子。
使用 Instruments 在现实生活中的设备上进行这些测量。
您将不得不做一些工作才能使其正常工作,但这是您可以做到的。
现在您可以生成一个新线程来定期或按需检查 CPU 和内存,然后创建一个类,如下所示:
@interface ProfilerBlock
-(id) init;
-(void) end;
@end
现在为ProfilerBlock类创建一个 C-Style 释放函数
static void __$_Profiler_Block_Release_Object_$__(ProfilerBlock **obj) // the long name is just to prevent duplicated symbol names //
{
[(*obj) end];
[(*obj) release];
(*obj) = nil;
}
最后,您可以创建宏以使您的生活更轻松:
#define CONCAT2(x, y) x ## y
#define CONCAT(x, y) CONCAT2(x, y)
#define PROFILER_SCOPE_OBJECT __attribute__((cleanup(__$_Profiler_Block_Release_Object_$__)))
#define PROFILE_BLOCK ProfilerBlock *CONCAT(__profilerBlock_, __LINE__) PROFILER_SCOPE_OBJECT = [[ProfilerBlock alloc] init];
一旦你拥有了所有这些,你可以像这样分析方法:
-(void) methodToProfile
{
PROFILE_BLOCK
// add some code to profile here //
// the "end" function will get called automatically after the method is done, even if you return early, allowing you to process the profiled data //
}
我希望这会有所帮助,很抱歉,如果我没有详细介绍如何测量内存和 CPU,但我相信其他答案已经很好地涵盖了这一点。
NSTimeInterval t1 = [[NSDate date] timeIntervalSince1970];
.... 定制流程 ...
NSTimeInterval t2 = [[NSDate date] timeIntervalSince1970];
NSTimeInterval dt = t2-t1; this is in milisec;