当前位置: 首页 > 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;
});
 

相关文章:

  • 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章 想想搞点啥-若依管理系统兼容一下
  • 持续8年仍难终了的纠纷:败诉方因拒执罪被立案,胜诉方银行账户遭冻结
  • 郑培凯:汤显祖的“至情”与罗汝芳的“赤子之心”
  • 哈马斯表示已释放一名美以双重国籍被扣押人员
  • 香港暂停进口美国北达科他州一地区禽肉及禽类产品
  • 国家统计局今年将在全国开展两次人口固定样本跟访调查
  • 上财发布“AI+课程体系”,人工智能如何赋能财经教育?