获取CPU使用率
- 方法:
在Objective-C中,可以使用
mach_msg
等函数结合task_info
来获取CPU使用率。示例代码如下:
#import <mach/mach.h>
#import <mach/mach_time.h>
float getCPULoad() {
kern_return_t kr;
task_info_data_t tinfo;
mach_msg_type_number_t task_info_count;
task_info_count = TASK_INFO_MAX;
kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count);
if (kr != KERN_SUCCESS) {
return -1;
}
task_basic_info_t basic_info;
basic_info = (task_basic_info_t)tinfo;
uint64_t user_time = basic_info->user_time.seconds * 1000000000ULL + basic_info->user_time.microseconds * 1000ULL;
uint64_t system_time = basic_info->system_time.seconds * 1000000000ULL + basic_info->system_time.microseconds * 1000ULL;
uint64_t total_time = user_time + system_time;
static uint64_t s_previous_total_time = 0;
static uint64_t s_previous_system_time = 0;
static uint64_t s_previous_user_time = 0;
if (s_previous_total_time == 0) {
s_previous_total_time = total_time;
s_previous_system_time = system_time;
s_previous_user_time = user_time;
return 0;
}
uint64_t elapsed_total_time = total_time - s_previous_total_time;
uint64_t elapsed_system_time = system_time - s_previous_system_time;
uint64_t elapsed_user_time = user_time - s_previous_user_time;
s_previous_total_time = total_time;
s_previous_system_time = system_time;
s_previous_user_time = user_time;
float cpu_usage = (float)(elapsed_system_time + elapsed_user_time) / (float)elapsed_total_time * 100.0f;
return cpu_usage;
}
- 原理:
通过
task_info
函数获取当前任务(即App进程)的基本信息,其中包含用户态时间(user_time
)和内核态时间(system_time
)。通过对比前后两次获取的时间差值,计算出在这段时间内CPU用于该任务的时间占比,从而得到CPU使用率。
获取内存占用
- 方法:
可以使用
task_info
函数获取内存相关信息。示例代码如下:
#import <mach/mach.h>
#import <mach/mach_time.h>
size_t getMemoryUsage() {
task_basic_info_data_t taskInfo;
mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;
kern_return_t kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&taskInfo, &infoCount);
if (kr != KERN_SUCCESS) {
return -1;
}
return taskInfo.resident_size;
}
- 原理:
通过
task_info
函数获取任务的基本信息,其中resident_size
字段表示当前任务在物理内存中占用的字节数,即内存占用量。