当前位置: 首页 > article >正文

iOS 获取设备占用内存

获取应用占用内存

  1. 获取应用进程占用内存
- (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; 
}
  1. 获取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;
}
  1. 获取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;}}}// 单位 Bytereturn memoryLimit;
}
  1. 获取应用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 获取设备占用内存

获取应用占用内存 获取应用进程占用内存 - (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 …...

C#功能测试

List 内部元素为引用 src[0]为"11" List<Source> src new List<Source>(); src.Add(new Source() { Name "1", Age 1, Description "1" }); src.Add(new Source() { Name "2", Age 2, Description "2"…...

js第八题

题八&#xff1a;滚动弹幕 要求&#xff1a; 1.页面上漂浮字体大小不一、颜色不一&#xff0c;从左向右滚动的弹幕&#xff1b; 2.底部中间有一个发送功能&#xff0c;可以发送新的弹幕&#xff1b; 3.底部的发送部分可以向下收起和弹出。 html <div id"danmu-con…...

第35次CCF计算机软件能力认证 python 参考代码

题目列表1. 密码2. 字符串变换3. 补丁应用4. 通讯延迟5. 木板切割题目列表 第35次CCF计算机软件能力认证 1. 密码 n = int(input()) for _ in range(n):s =...

2025百度快排技术分析:模拟点击与发包算法的背后原理

一晃做SEO已经15年了&#xff0c;2025年还有人问我如何做百度快速排名&#xff0c;我能给出的答案就是&#xff1a;做好内容的前提下&#xff0c;多刷刷吧&#xff01;百度的SEO排名算法一直是众多SEO从业者研究的重点&#xff0c;模拟算法、点击算法和发包算法是百度快速排名的…...

国产FPGA开发板选择

FPGA开发板是学习和开发FPGA的重要工具&#xff0c;选择合适的开发板对学习效果和开发效率至关重要。随着国产FPGA的发展&#xff0c;淘宝上的许多FPGA开发板店铺也开始进行国产FPGA的设计和销售&#xff0c;本文将对国产FPGA和相关店铺做个简单梳理&#xff0c;帮助有需要使用…...

DeepSeek+即梦 做AI视频

DeepSeek做AI视频 制作流程第一步&#xff1a;DeepSeek 生成视频脚本和分镜 第二步&#xff1a;生成分镜图片绘画提示词第三步&#xff1a;生成分镜图片第四步&#xff1a;使用可灵 AI 工具&#xff0c;将生成的图片转成视频。第五步&#xff1a;剪映成短视频 DeepSeek 真的强&…...

【R语言】聚类分析

聚类分析是一种常用的无监督学习方法&#xff0c;是将所观测的事物或者指标进行分类的一种统计分析方法&#xff0c;其目的是通过辨认在某些特征上相似的事物&#xff0c;并将它们分成各种类别。R语言提供了多种聚类分析的方法和包。 方法优点缺点适用场景K-means计算效率高需…...

LVS相关原理

一、LVS集群的体系结构 1.1 LVS简介 LVS 是 Linux Virtual Server 的简称&#xff0c;也就是 Linux 虚拟服务器 , 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是 www.linuxvirtualserver.org 。现在 LVS 已经是 Linux标准内核的一部分&#xff0c;在Linux2…...

linux--关于makefile

makefile文件 可以指定编译顺序&#xff0c;这样方便一个项目的多个文件要编译的挨个操作的麻烦。 makefile文件的命名&#xff1a;makefile 或者 Makefile 必须是这俩&#xff0c;系统才能识别 规则的书写语法如下&#xff1a; 一个makefile内可以有多个规则 目标:依赖a 依…...

从2025年起:数字化建站PHP 8.1应成为建站开发的基准线

在数字化浪潮席卷全球的今天,PHP语言仍然保持着Web开发领域的核心地位。根据W3Techs最新统计,PHP驱动着全球78.9%的已知服务端网站。当时间指向2025年,这个拥有28年历史的编程语言将迎来新的发展里程碑——PHP 8.1版本应成为网站开发的最低基准要求,这不仅是技术迭代的必然…...

根据deepseek模型微调训练自动驾驶模型及数据集的思路

以下是使用DeepSeek模型微调训练自动驾驶模型的详细步骤和代码示例。本流程假设你已有自动驾驶领域的数据集&#xff08;如驾驶指令、传感器数据等&#xff09;&#xff0c;并基于PyTorch框架实现。 Step 1: 环境准备 # 安装依赖库 pip install torch transformers datasets n…...

蓝桥杯篇---IAP15F2K61S2定时器

文章目录 前言简介定时器的工作模式1.模式02.模式13.模式24.模式3 定时器的寄存器1.TMOD2.TCON3.THO/TL04.TH1/TL1 定时器的使用步骤1.配置TMOD2.设置初值3.启动定时器4.使能中断5.编写中断服务函数 示例代码&#xff1a;定时器的基本使用代码说明示例代码&#xff1a;定时器1用…...

Java发展史

JavaEE的由来 语言的诞生 Java的前身是Oak语言&#xff0c;其目的是搞嵌入式开发开发智能面包机 叮~~~&#x1f35e;&#x1f35e;&#x1f35e; 产品以失败告终 巅峰 网景公司需要网景浏览器打开网页&#xff0c;Oak->Java&#xff0c;进行前端开发&#xff08;相关技…...

Jenkins 新建配置 Freestyle project 任务 六

Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description&#xff1a;任务描述 勾选 Discard old builds Discard old builds&#xff1a;控制何时…...

Electron视图进程和主进程通讯

快速创建基于vue的electron项目&#xff1a;quick-start/create-electron - npm 视图线程也就index.html是无法直接访问这个api的&#xff08;如果没有开启视图层访问nodejs的功能&#xff0c;现在几乎没法直接开启&#xff0c;开启了一堆警告提示&#xff09; 所以需要通过r…...

【湖南-益阳】《益阳市市本级政府投资信息化项目预算编制与财政评审工作指南》益财评〔2024〕346号-省市费用标准解读系列40

《益阳市市本级政府投资信息化项目预算编制与财政评审工作指南&#xff08;试行&#xff09;》&#xff08;益财评〔2024〕346号&#xff09;由益阳市财政局主编&#xff0c;2024年10月17日起正式执行&#xff0c;本指南主要规定了政府投资信息化项目费用的构成、测量过程和方法…...

springboot+mybatis按条件分页查询多张表

文章目录 背景方案推荐创建 DTO创建 Mapper创建对应 xmlService 代码 背景 假如同 mysql 数据源下有如下几张表&#xff1a; 用户基础信息表用户地址表用户学历信息表 我希望做分页查询用户数据&#xff0c;用户数据为各个表内信息的汇总&#xff0c;并且这个分页查询会根据…...

探索Java中的集合类_特性与使用场景

1. 引言 1.1 Java集合框架概述 Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作一组对象的类和接口的统称。它提供了多种数据结构来满足不同的需求,如列表、集合、映射等。JCF的核心接口包括Collection、List、Set、Queue和Map,以及它们的各种实现…...

具身智能在智能巡检机器人中的应用——以开关柜带电操作机器人为例

随着机器人技术和人工智能的迅速发展&#xff0c;具身智能在各行业的应用日益广泛&#xff0c;尤其是在电力行业中的智能巡检领域。传统的电力巡检和维护工作通常需要人工操作&#xff0c;存在着高温、高压、强电磁场等危险环境&#xff0c;且效率较低。开关柜带电操作机器人作…...

C#+SqlSugar实现主从库读写分离

在使用 **SqlSugar** 进行分库操作时&#xff0c;可以通过配置多个数据库连接&#xff0c;并根据业务逻辑动态切换数据库。以下是一个完整的分库示例&#xff0c;展示如何实现分库功能。 --- ### **1. 安装 NuGet 包** 安装 SqlSugarCore&#xff1a; bash dotnet add packag…...

Webpack 基础入门

一、Webpack 是什么 Webpack 是一款现代 JavaScript 应用程序的静态模块打包工具。在 Web 开发中&#xff0c;我们的项目会包含各种类型的文件&#xff0c;如 JavaScript、CSS、图片等。Webpack 可以将这些文件打包成一个或多个文件&#xff0c;以便在浏览器中高效加载。它就像…...

nuxt中引入element-ui组件控制台报错问题

在使用element-ui组件的外层加一层 <client-only placeholder"Loading..."><van-button type"primary">主要按钮</van-button> </client-only> 实际使用&#xff1a; <div class"tab"><client-only placehol…...

【机器学习】线性回归 多项式线性回归

【机器学习系列】 KNN算法 KNN算法原理简介及要点 特征归一化的重要性及方式线性回归算法 线性回归与一元线性回归 线性回归模型的损失函数 多元线性回归 多项式线性回归 多项式线性回归 V1.0多项式回归多项式回归的公式 特征代换超越函数作为特征向量维度 V1.0 多项式回归 …...

Java面试第二山!《计算机网络》!

在 Java 面试里&#xff0c;计算机网络知识是高频考点&#xff0c;今天就来盘点那些最容易被问到的计算机网络面试题&#xff0c;帮你轻松应对面试&#xff0c;也方便和朋友们一起探讨学习。 一、HTTP 和 HTTPS 的区别 1. 面试题呈现 HTTP 和 HTTPS 有什么区别&#xff1f;在…...

RocketMQ 5.0安装部署

0.前言 在微服务架构逐渐成为主流的今天&#xff0c;消息队列如同数字世界的快递员&#xff0c;承担着系统间高效通信的重要使命。 Apache RocketMQ 自诞生以来&#xff0c;因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余…...

go语言并发的最佳实践

Go 语言的并发模型是其最强大的特性之一&#xff0c;基于 CSP&#xff08;Communicating Sequential Processes&#xff09;理论&#xff0c;通过 goroutine 和 channel 实现轻量级并发. 一、并发核心概念 1. Goroutine 在 Go 语言中&#xff0c;Goroutine 是实现并发编程的…...

俄罗斯方块游戏完整代码示例

以下是一个基于Cocos Creator引擎开发的俄罗斯方块游戏的完整代码示例。该游戏实现了俄罗斯方块的基本功能&#xff0c;并且代码整合在单个文件中&#xff0c;无需任何外部依赖&#xff0c;可以直接在浏览器中运行。 1. 创建Cocos Creator项目 首先&#xff0c;确保你已经安装了…...

Ubuntu22.04配置cuda/cudnn/pytorch

Ubuntu22.04配置cuda/cudnn/pytorch 安装cuda官网下载.run文件并且安装/etc/profile中配置cuda环境变量 cudnn安装官网找cuda版本对应的cudnn版本下载复制相应文件到系统文件中 安装pytorch官网找cuda对应版本的pytorchpython代码测试pytorch-GPU版本安装情况 安装cuda 官网下…...

【九】Golang 数组

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 数组数组初始化默认初始化显式初始化省略长度初始化索…...