主页 > 其他  > 

iOS获取设备占用内存

iOS获取设备占用内存

获取应用占用内存

获取应用进程占用内存 - (NSUInteger)memoryUsage { task_vm_info_data_t vmInfo; mach_msg_type_number_t count = TASK_VM_INFO_COUNT; kern_return_t result = task_info(mach_task_self(), TASK_VM_INFO, (task_info_t)&vmInfo, &count); if (result != KERN_SUCCESS) { return 0; } // 单位为字节 return (NSUInteger)vmInfo.phys_footprint; } 获取free内存(与xcode基本一致) - (double)usageComparisonFree { mach_port_t host_port = mach_host_self(); mach_msg_type_number_t count = HOST_VM_INFO64_COUNT; vm_size_t page_size; vm_statistics64_data_t vminfo; host_page_size(host_port, &page_size); host_statistics64(host_port, HOST_VM_INFO64, (host_info64_t)&vminfo,&count); uint64_t free_size = (vminfo.free_count + vminfo.external_page_count + vminfo.purgeable_count - vminfo.speculative_count) * page_size; return free_size / 1024.0 / 1024.0; } 获取APP可用内存 - (NSInteger)memoryUsageLimitByByte { NSInteger memoryLimit = 0; // 获取当前内存使用数据 if (@available(iOS 13.0, *)) { task_vm_info_data_t vmInfo; mach_msg_type_number_t count = TASK_VM_INFO_COUNT; kern_return_t kr = task_info(mach_task_self(), TASK_VM_INFO, (task_info_t)&vmInfo, &count); if (kr == KERN_SUCCESS) { // 间接获取一下当前进程可用的最大内存上限 // iOS13+可以这样计算:当前进程占用内存+还可以使用的内存=上限值 NSInteger memoryCanBeUse = (NSInteger)(os_proc_available_memory()); if (memoryCanBeUse > 0) { NSInteger memoryUsed = (NSInteger)(vmInfo.phys_footprint); memoryLimit = memoryUsed + memoryCanBeUse; } } } if (memoryLimit <= 0) { NSInteger deviceMemory = [NSProcessInfo processInfo].physicalMemory; memoryLimit = deviceMemory * 0.55; } if (memoryLimit <= 0) { // 这个值一般要小很多, 上面都获取不到才使用 mach_port_t host_port = mach_host_self(); mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); vm_size_t page_size; vm_statistics_data_t vm_stat; kern_return_t kr; kr = host_page_size(host_port, &page_size); if (kr == KERN_SUCCESS) { kr = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); if (kr == KERN_SUCCESS) { memoryLimit = vm_stat.free_count * page_size; } } } // 单位 Byte return memoryLimit; } 获取应用cpu使用情况 - (float)cpuUsage { kern_return_t kr; task_info_data_t tinfo; mach_msg_type_number_t task_info_count = TASK_INFO_MAX; kr = task_info(mach_task_self(), TASK_THREAD_TIMES_INFO, (task_info_t)tinfo, &task_info_count); if (kr != KERN_SUCCESS) return -1; task_thread_times_info_t times_info = (task_thread_times_info_t)tinfo; double userTime = times_info->user_time.seconds + times_info->user_time.microseconds / 1e6; double systemTime = times_info->system_time.seconds + times_info->system_time.microseconds / 1e6; double totalTime = userTime + systemTime; static double lastTotalTime = 0; static NSTimeInterval lastSamplingTime = 0; NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970]; NSTimeInterval elapsedTime = currentTime - lastSamplingTime; float cpuUsage = 0.0; if (lastSamplingTime != 0 && elapsedTime > 0) { cpuUsage = (totalTime - lastTotalTime) / elapsedTime * 100; } lastTotalTime = totalTime; lastSamplingTime = currentTime; return cpuUsage; }
标签:

iOS获取设备占用内存由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“iOS获取设备占用内存