【问题标题】:File reading performance on smartphones: internal storage vs. SD card vs. PC hard disk智能手机文件读取性能:内部存储 vs. SD 卡 vs. PC 硬盘
【发布时间】:2012-10-14 01:26:46
【问题描述】:

我的 Android 应用程序将使用大文件和非常大的文件(即大小在 10MB 和 2GB 之间)。

我一直想知道智能手机使用什么硬件来实现稳定存储,以及这里的软件(文件读取/查找)注意事项是否与 PC 硬盘相似。我试图查找有关硬件的信息并对其进行某种描述(内部存储、SD 卡),但我检查的所有来源都不够全面和/或具体。我的(相互关联的)问题是:

  1. 在“现代”智能手机(例如 Android 2.2. 手机)上读取大文件时,与在 PC 上使用 Java 应用程序执行相同操作时,我必须考虑哪些主要差异? (就磁盘查找/读取性能而言;显然,手机 RAM 比 PC 小,因此在缓冲区等情况下必须考虑到这一点。)
  2. 与 PC 硬盘相比,智能手机中使用的稳定存储硬件有哪些(相关的)主要区别? (我知道这是一个非常广泛的问题,所以我什至很感谢这里的一个非常简短的回答,可能还有一些可靠的外部 URL)
  3. InputStream读取和查找(skipBytes)方面,使用内部存储和SD卡之间是否有区别(例如在Android上)(我故意没有写“外部存储”,因为它不一定每个设备上的 SD 卡)? SD 卡慢吗?
  4. 例如,我想从一个 2GB 的文件中读取 2MB 的数据,而这 2MB 的数据分布在文件的许多不同/遥远的部分。所有偏移量都是已知的,因此我创建了一个升序的偏移量,然后使用BufferedInputStream.read()(例如在DataInputStream)来读取它们(并在必要时使用skipBytes() 进行搜索)。因此,在底层文件系统中,这可能需要“遍历”整个 2GB 文件。 (例如,Android 在需要时使用 linux 函数在文件中查找。)但是,查找是否与在 PC 硬盘中一样有效? SD 卡与内部存储在寻道效率方面如何?
  5. 典型的数据读取速度是多少? (智能手机内部存储 vs. SD 卡 vs. PC 非 SSD 硬盘)

我知道对我的具体应用程序进行基准测试是必须的,但我也欢迎对此事进行理论上的澄清。

重要提示:当我问“......是否像在 PC 硬盘中一样高效?”时,我不仅指绝对值,还指 机制。也就是说,如果它基于相同的逻辑原理工作(= 尽可能跳过大部分),或者存在一些缺点(例如,在 SD 卡上不可能进行这种“基于跳过”的搜索,因此跳过更多 - - 即不成比例地 - 在智能手机硬件上比在 PC 硬盘上没用)。

【问题讨论】:

  • What are typical data read speeds? 它在每个系统/设备上有所不同,因为它与处理器和芯片组绑定。在这种情况下,现代智能手机可能比赛扬处理器计算机更快,同样
  • 关于克劳斯·维拉卡的回答中“寻求总是一项缓慢的任务”的说法,我不得不不同意。这通常不是真的。例如根据我所听到的,在 SD 卡上,它甚至可能比在硬盘上更快(由于 SD 卡硬件的性质)。 IE。选择随机位置可能比在 PC 硬盘上更快。

标签: android inputstream smartphone seek persistent-storage


【解决方案1】:

您的问题太具体,要求的数据太多 :-) 我认为很难找到另一个对你有非常具体要求的人。

一般来说,SD卡数据访问速度不仅取决于驱动硬件(设备),还取决于卡本身和要访问的软件(Android版本)。

另一方面,您可以在以下位置找到有关 SD 卡速度的一些信息:

即使在 Google Play 上,您也可以找到一些应用来测试您设备上 SD 卡的速度(搜索 SD Card Tester、SD 工具等)

【讨论】:

  • 谢谢,这也很有帮助(包括链接)。这个问题并不是很具体,但我同意它需要很多数据。 Stackoverflow 也是一种在线“词典”,所以我认为这还可以。 :-)
【解决方案2】:

试图回答你的问题

    1234563 / 比你可以使用相同的 File file bla.. ..
  1. 智能手机的内存比 HDD 快,但如果将其存储在外部 SDC 卡中,这将改变,因为 SDC 卡具有最高的读写速度。

  2. 是的,存在差异...如果从内部或 SDCard(不是外部 SD 卡)读取,否则我们不应该使用 1 或 2GB 和 16Gb 的设备进行存储。它在主内存中的所有内容都会运行得更快。

  3. 搜索总是一项缓慢的任务,即使您没有到达文件末尾,您也可以一次获得所有需要关闭流的日期。你可以做的更快的是每次你的应用程序读取了一些 KB 或 MB 时重新加载缓存......而不是你可以午餐 asyncTask 去加载它,一旦主线程完成将寻找更多数据如果存在。这应该会加快很多,因为您将只在内存中进行搜索。

  4. 您将需要一个应用程序或编写自己的应用程序,这应该不会太难,您可以使用处理程序,并在数组或列表中加载尽可能多的内容,并计算字节数,以及在其他内存类型(内部 SD 卡和外部 SDCard)上重复此操作。

【讨论】:

  • 感谢您的回答。关于问题#4:实际上,这是我最重要的问题,我的意思与你处理它的方式不同。 (我的软件组件在单独的线程中运行,因此响应能力对我来说不是问题。)我实际上想知道“搜索”是否与 PC 硬盘上一样有效。换句话说,读取 2MB 并不是什么大问题,所以寻找本身是否有效的问题。因为我们从一个 2GB 的文件中读取了 2MB。如果查找效率不高,那么这将比读取单独的 2MB 文件花费更多时间。在 PC 上,搜索是有效的。
  • 我不得不不同意“寻找总是一项缓慢的任务”的说法。这通常不是真的;例如,根据我所听到的,在 SD 卡上,它甚至可能比在 SD 卡上更快。硬盘(由于 SD 卡硬件的性质)。即从随机位置读取可能比在 PC 硬盘上更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2016-08-02
  • 2012-12-15
相关资源
最近更新 更多