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

解决NSMutableData appendData性能开销太大的问题

用以下高效方式,原理上是不复制内存:

dispatch_data_t accumulatedData = dispatch_data_empty;

// 假设我们有多个数据块需要合并
for (NSData *chunk in dataChunks) {
    dispatch_data_t chunkData = dispatch_data_create(chunk.bytes, chunk.length, 
                                                     dispatch_get_global_queue(0, 0), 
                                                     DISPATCH_DATA_DESTRUCTOR_DEFAULT);
    
    // 合并数据,非常高效,不需要复制
    accumulatedData = dispatch_data_create_concat(accumulatedData, chunkData);
    
    // 如果不再需要 chunkData,释放它
    // dispatch_release(chunkData); // 在 ARC 下不需要
}

// 最后,如果需要 NSData,可以创建一个连续的内存区域
NSMutableData *finalData = [NSMutableData dataWithLength:0];
dispatch_data_apply(accumulatedData, ^bool(dispatch_data_t region, size_t offset, const void *buffer, size_t size) {
    [finalData appendBytes:buffer length:size];
    return true;
});
 

http://www.dtcms.com/a/153993.html

相关文章:

  • Linux命令行基础入门详解
  • 09前端项目----分页功能
  • 通过监督微调(SFT)提升AI Agent效果的完整指南
  • 2025年3月电子学会青少年机器人技术(五级)等级考试试卷-实际操作
  • 小刚说C语言刷题——1317正多边形每个内角的度数?
  • 项目班——0419——chrono时间库
  • Redis 与 Memcache 全面对比:功能、性能与应用场景解析
  • mysql——索引事务和JDBC编程
  • 项目——高并发内存池
  • RHCE练习1
  • C语言——函数
  • Spring Security认证流程
  • nacos配置springboot配置信息,并且集成金仓数据库
  • 精选面试题
  • 【解决】Android Gradle Sync 报错 Could not read workspace metadata
  • 程序员鱼皮最新项目-----AI超级智能体教程(一)
  • 04-stm32的标准外设库
  • 【C语言】C语言动态内存管理
  • MS1205N激光测距用高精度时间测量(TDC)电路,单精度模式 60ps,双精度模式 30ps
  • LJF-Framework 第15章 想想搞点啥-若依管理系统兼容一下
  • 机器学习项目管理:团队协作与版本控制
  • aarcpy 列表函数的使用(1)
  • MCP‌和LangGraph‌结合2
  • 第十节:性能优化高频题-虚拟DOM与Diff算法优化
  • 探寻健康密码:养生从日常细节开始
  • ap无法上线问题定位(交换机发包没有剥掉pvid tag)
  • 机械手排列定位设备 PLC梯形图流程
  • 通信新思路:EtherCAT转Profinet网关在自主研发机器人中的技术实践与优化
  • 革新AI生产力,比象AI源码 - 下一代智能创作引擎
  • 【线段树 容斥原理】P3801 红色的幻想乡|普及+