多个 MIC 的测试套件持久性/性能问题

Posted

技术标签:

【中文标题】多个 MIC 的测试套件持久性/性能问题【英文标题】:Rest Kit Persistance/Performance issue with Multiplie MOCs 【发布时间】:2013-01-23 04:28:30 【问题描述】:

这是我第一次使用新版本的 RestKit 和多个 MOC,所以这让我有点难过。我正在使用 RestKit 0.20-pre5,并通过 RestKit 操作以及在整个应用程序中手动添加托管对象。

RestKits 提供了两个 MOC 来管理性能:mainQueue 和 PersistantStore 对象上下文。通过检查 RestKits 代码,所有新的托管对象都保存到 mainQueue MOC(基于 RKObjectManager 行 433 和各种指针地址的检查)。由 RestKit 创建的对象可以很好地保留(当然是在调用 save 之后),但是每当我在同一个 mainQueue MOC 中创建自己的 ManagedObjects 并保存它时,当我重新启动应用程序时它们不会保留。 (我经常保存相关的 MOC)

这就是持久存储的用武之地。每当我将持久存储与 mainQueue MOC 一起保存时,数据就会持久存在。我想这与 RKManagedObjectStore 合并更改有关,每当我在persistantStoreMOC 上调用 save 时(通过通知)所以......一切都好吗?

问题是,每当我保存两个上下文时,都会出现明显的延迟,持续至少 1 秒(最多可以变化 3 秒!)。这种滞后似乎增加了我创建的更多 NSManagedObjects。我已经运行了仪器并且没有内存问题。我一定是错误地使用了核心数据的 RestKits 实现。

为了记录,我使用以下方法保存:

- (void)saveContext

    __block BOOL _blockSuccess;
    __block NSError *_blockError;

    NSManagedObjectContext *persistantContext = [[[RKObjectManager sharedManager] managedObjectStore] persistentStoreManagedObjectContext];

    [globalManagedObjectContext performBlockAndWait:^
            _blockSuccess = [globalManagedObjectContext save:&_blockError];
    ];
    if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);

    [persistantContext performBlock:^
        _blockSuccess = [persistantContext save:&_blockError];
        if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);
    ];

每当我们想要保存应用程序的状态时,都会从单例对象中调用它。 (globalManagedObjectContext 只是一个指向 RestKits mainQueueObjectContext 的宏)。删除 persistantContext 保存会消除滞后,但当然不会持久化数据。

任何人的帮助(尤其是 Blake Watters ;)将不胜感激!

干杯,

阿隆

【问题讨论】:

您找到解决方案了吗?我也有同样的困惑。在我的情况下,我在所有代码中都使用了 persistentStoreManagedObjectContext 并且这些更改仍然很好,但我很确定这不是这样做的预期方式。 【参考方案1】:

我相信答案是使用RKAdditions 类别添加到NSManagedObjectContext 的saveToPersistentStore: 方法。

这取自here 和here。

您在使用时还有问题吗?

【讨论】:

抱歉延迟回复,很遗憾它不起作用。我也不能使用persistantStoreMOC,因为我在主上下文中有对象(通过RestKit 下载)必须与创建的对象交互,因此该解决方案不起作用。 抱歉,我收回了……它确实工作正常,但有一种行为不端的清理方法让我觉得没有任何东西可以正确保存。

以上是关于多个 MIC 的测试套件持久性/性能问题的主要内容,如果未能解决你的问题,请参考以下文章

使用立方体测试的场景套件性能

以良好的性能持久化分层数据的集合

哪个套件 KahaDB 或现有的用于 activeMQ 的 JDBC?

java ssl 使用不同的加密套件,对性能影响很大

Web应用程序的性能测试工具[关闭]

Spark 调优之RDD持久化级别及kryo序列化性能测试