我想在我的项目中使用“CPU 采样器”进行 CPU 测量,但我找不到它。我正在使用 XCode 4.3
4 回答
首先在你的接口文件中导入所有需要的头文件。
#include <sys/sysctl.h>
#include <sys/types.h>
#include <mach/mach.h>
#include <mach/processor_info.h>
#include <mach/mach_host.h>
processor_info_array_t cpuInfo, prevCpuInfo;
mach_msg_type_number_t numCpuInfo, numPrevCpuInfo;
unsigned numCPUs;
NSLock *CPUUsageLock;
并在您的实现文件中。
- (void)cpuSampler:(NSTimer *)timer
{
natural_t numCPUsU = 0U;
kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO,&numCPUsU, &cpuInfo, &numCpuInfo);
if(err == KERN_SUCCESS) {
[CPUUsageLock lock];
for(unsigned i = 0U; i < numCPUs; ++i) {
float inUse, total;
if(prevCpuInfo) {
inUse = (
(cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])
+ (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])
+ (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])
);
total = inUse + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);
} else {
inUse = cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];
total = inUse + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];
}
if (i == 0) {
NSString *string0 = [NSString stringWithFormat:@"Core: %u Usage: %f%",i,(inUse / total)*100];
}
if (i == 1) {
NSString *string1 = [NSString stringWithFormat:@"Core: %u Usage: %f%",i,(inUse / total)*100];
}
}
[CPUUsageLock unlock];
if(prevCpuInfo) {
size_t prevCpuInfoSize = sizeof(integer_t) * numPrevCpuInfo;
vm_deallocate(mach_task_self(), (vm_address_t)prevCpuInfo, prevCpuInfoSize);
}
prevCpuInfo = cpuInfo;
numPrevCpuInfo = numCpuInfo;
cpuInfo = NULL;
numCpuInfo = 0U;
}
}
NSlog string0 和 string1 的值以了解 CPU 测量并通过计时器调用此方法。
您可以使用 Time Profiler 乐器代替 Sampler 乐器。他们记录了类似的信息。
如果您需要使用适用于 iOS 的 Sampler 仪器,请选择 OpenGL ES Driver 模板。OpenGL ES Driver 模板包括 Sampler 工具。选择 OpenGL ES Driver 模板后,从仪器列表中选择 OpenGL ES Driver 仪器,然后按 Delete (Backspace) 键将仪器从文档中删除。
采样器乐器一直在乐器中。为此,请启动 Instruments 并使用空白分析会话或从 OpenGL ES Driver 模板(如 Mark 建议的那样)之类的东西开始,其中已经包含 Sampler 仪器。要将 Sampler 乐器添加到您的模板中,请单击 Library 工具栏选项并将 Sampler 拖到您的模板中。
就个人而言,我更喜欢使用 Time Profiler,原因我在这个答案中描述。
左上角有一个运行按钮,看起来像一个播放按钮。如果您单击将出现一个下拉菜单,请选择配置文件。这将打开“仪器”,您可以在其中选择“时间分析器”。如果应用程序没有在模拟器中自动启动,请单击记录。
我建议选中“隐藏系统库”和“仅显示 Obj-C”复选框,以便查看代码。
*注意,如果你双击一个函数,它会显示它在一些代码上花费的时间的百分比细分,这非常方便。