【问题标题】:is it better to overwrite data in memory or to read first for checking是覆盖内存中的数据还是先读取以进行检查更好
【发布时间】:2014-10-09 21:59:15
【问题描述】:

我的问题特别针对安卓。我正在使用共享首选项在设备上本地保存一些数据。每次我调用服务器时,响应可能是新的,也可能是我已经坚持的相同内容。在不改变所问问题的情况下,什么是更好的设计?

一:检查数据是否不存在再添加?

if(!getFromSharedPrefs(dataKey).equals(newData)){
  addToSharedPrefs(dataKey, newData);
}

两个:只需每次添加新数据,因为覆盖并不比读取更昂贵?

addToSharedPrefs(dataKey, newData);

请解释为什么最好先检查或为什么这两种方法是等效的。

我假设答案与平台或设备无关,所以如果你知道 Objective-c 或 java 或其他什么,那应该没关系 (?)

【问题讨论】:

  • 让我澄清一下,无论我采用哪种方法,最终都可能每天被调用 200 次或更多次。

标签: java android memory-management sharedpreferences


【解决方案1】:

第 2 点。原因如下:(假设 addToSharedPrefs(...) 只是简单地更新 map-ish 数据结构中的引用,而不进行一些进一步的网络调用或广泛的计算,这没有意义,但只是在案例...)您正在检索任何一种方式,这很昂贵,但第一种方式也会在您的数据对象上调用 equals() ,这可能很昂贵,这可能不是一个巨大的差异,但这样您就可以消除它.

【讨论】:

  • 感谢您的回复。我不明白retrieving either 如何使这两种方法等效。是的,我在这两种情况下都在检索,但我只在第二种情况下写作。这不是为案例1节省一些钱吗?或者您是说案例 1 的节省并不显着。让我澄清一下,无论我采用哪种方法,最终都可能每天被调用 200 次或更多。
  • 再读一遍问题。我认为这一切都发生在内存中,并且 addToSharedPrefs 正在写入内存,而不是闪存。在您的实际情况下,您很可能使用#1 更好,除非您的 equals() 方法执行一些疯狂的时间密集型工作。恕我直言,每天 200 次根本不算多。如果它中断了用户体验,那将是一个问题,但如果这发生在后台,您的驱动成本(按数量级)是从服务器检索数据的网络调用,无论哪种情况,您都在这样做。
猜你喜欢
  • 2012-03-01
  • 2018-06-27
  • 2020-09-28
  • 2014-08-27
  • 2014-02-24
  • 1970-01-01
  • 2015-05-10
  • 2013-09-24
  • 1970-01-01
相关资源
最近更新 更多