【问题标题】:Is it a time-consuming operation for archiving and unarchiving?归档和取消归档是一项耗时的操作吗?
【发布时间】:2018-03-18 02:59:01
【问题描述】:

当我们归档一个对象时,使用 archiveRootObject 。

归档和取消归档是否耗时?

[NSKeyedArchiver archiveRootObject:xxx toFile:filePath];

在一个线程中。

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [NSKeyedArchiver archiveRootObject:xxx toFile: filePath]
});

我们什么时候需要使用线程来归档或取消归档?

【问题讨论】:

  • 你觉得它很耗时吗?
  • 如果需要归档的财产太多。

标签: objective-c nskeyedarchiver


【解决方案1】:

archiveRootObject:toFile: 做了两件事:encodeRootObject 和 writeToFile。编码受 CPU 和内存限制。 writeToFile 是 IO 绑定的。

encodeRootObject 如果图表中有很多对象,或者有很多循环,可能会很慢。还有一些"Performance Considerations" in the docs

将 IO 绑定操作(如 writeToFile)移动到后台线程是一种常见的做法,因为它通常会慢一个数量级,并且因为对此没有任何保证(它可能会减慢速度取决于其他各种 IO 活动)。

一般而言,您应该使用 Xcode Instruments Profiler 来衡量典型工作负载场景中的特定案例,并查看您的策略是否存在任何需要改进的问题。测量结果可能会让您大吃一惊,因为在其他一些代码中可能会发现性能瓶颈。

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多