当前位置: 首页 > 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章 想想搞点啥-若依管理系统兼容一下
  • 五一假期多地政府食堂对外开放:部分机关食堂饭菜“秒没”
  • 苹果第二财季营收增长5%,受关税政策影响预计下一财季新增9亿美元成本
  • 魔都眼|石库门里看车展,五一来张园体验城市“漫时光”
  • 向左繁华都市,向右和美乡村,嘉兴如何打造城乡融合发展样本
  • 美国第一季度经济环比萎缩0.3%
  • 滨江集团:一季度营收225.07亿元,净利润9.75亿元