【问题标题】:Core Data - can I store a calculated value as a persistent attribute?核心数据 - 我可以将计算值存储为持久属性吗?
【发布时间】:2011-05-13 21:16:35
【问题描述】:

背景

  • 我有一个存储在瞬态属性中的计算值。
  • 每次我的应用程序启动时,都需要更新瞬态。
  • 启动时间真的很慢(即 10-15 秒)
  • 仪器确认更新非常昂贵。

问题

可以将计算值存储在持久属性中吗?

我会使用Martin Brugger's Dependant Properties 来保持计算的值是最新的。

更多信息

我计算的值是数千个对象的持续时间:

Name                       Duration
Users                      70s            
    Proposal.doc           35s   
      12:32-12:32          5s   
      13:11-13:11          30s   
    Proposal2.doc          35s   
      14:32-14:32          15s   
      15:11-15:11          20s   
    ...thousands more objects...

我的尝试

  • 我已使用预取和setReturnsObjectsAsFaults:NO 将触发的故障数量降至最低,但它会占用大量内存并且仍然需要很长时间。

  • 我已经使我的瞬时更新代码尽可能高效。

  • 我知道我可以在后台线程上获取并使用进度条,但我希望用户根本不必等待。

【问题讨论】:

    标签: cocoa performance core-data fetch transient


    【解决方案1】:

    我不确定我是否完全理解这个问题,但我认为您要问的问题的简单答案是“当然”。 :-)

    拥有一个瞬态的、实时计算的“currentTotalDuration”值一个“cachedTotalDuration”属性没有任何问题。当“currentTotalDuration”更新时,将其放入“cachedTotalDuration”就完成了。在我看来,将持久缓存属性与仅在需要更新时使用的“实时计算”瞬态值一起使用是完全合理的。

    我不熟悉 Martin Brugger 的 Dependent Properties,但听起来大部分辛苦的工作已经为您完成了。

    我希望我回答了您实际提出的问题。 :-D

    【讨论】:

    • 感谢 Joshua 的快速回答。你已经了解了我原来的问题的要点。为什么我不能完全放弃瞬态“currentTotalDuration”而只依赖“cachedTotalDuration”?
    • 我不知道答案,因为我不熟悉您的“重新计算总数”逻辑的工作原理。 :-) 您的帖子建议您需要使用该属性来重新计算您的值。如果您有一个不需要是属性的单独“更新”方法,那么您可以这样做。
    • 我确实有一个单独的更新方法来更新属性。我只是在询问是否只有“cachedTotalDuration”作为持久属性会做一些奇怪的事情,这会弄乱我的数据存储或使我的代码崩溃。从你所说的来看,这样做听起来很安全。感谢您快速而出色的回答。
    • 当然。我想让我感到困惑的是,对我来说,“这只是另一个持久属性”。你用它做什么完全取决于你。 :-) 了解您担心的可能原因:您的最终用户不会看到您的数据模型,因此即使您觉得它“脏”,您的用户甚至都不知道它的存在,只是应用程序不再需要30 秒启动。 :-D
    • 由于我对很多核心数据的东西还是陌生的,我想这只是我偏执。现在我很高兴我能够在 30 秒内加载我的应用程序。最好更像 2... :)
    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2023-03-07
    • 2012-12-20
    • 2017-06-22
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多