智能手机上的文件读取性能:内部存储 vs. SD 卡 vs. PC 硬盘

14

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

我一直在思考智能手机使用哪种硬件进行稳定存储,以及与PC硬盘的文件读取/寻道等软件考虑是否相似。我尝试找到有关硬件的信息,并且对此有了某种了解(内部存储,SD卡),但是我查阅的所有来源都不够全面和/或具体。我的相关问题如下:

  1. 在“现代”智能手机上阅读大文件(例如在Android 2.2手机上)时,在磁盘寻道/读取性能方面与PC上Java应用程序执行相同操作时必须考虑哪些主要区别?(显然,手机RAM比PC上小,因此必须考虑缓冲区等因素。)
  2. 智能手机使用的稳定存储硬件与PC硬盘相比,(相关的)主要区别是什么?(我知道这是一个非常广泛的问题,因此我甚至欣赏一个非常简短的答案以及可能的几个可靠的外部URLs)
  3. 在InputStream读取和寻道(skipBytes)方面,使用内部存储和SD卡(我故意没有写“外部存储”,因为不是在每个设备上都是SD卡)之间是否有差异? SD卡速度较慢吗?
  4. 例如,我想从2GB文件中读取2MB的数据,这2MB数据分布在文件的许多不同/遥远的部分中。所有偏移量都已知,因此我创建了一个偏移量的升序,并使用BufferedInputStream.read()(例如在DataInputStream中)来读取它们(并在必要时使用skipBytes进行寻道)。因此,在底层文件系统中,这可能需要“浏览”整个2GB文件。(例如,Android在需要时使用Linux函数在文件中搜索。)但是,磁盘寻道是否像PC硬盘那样有效?就寻道效率而言,SD卡和内部存储有什么区别?
  • 典型的数据读取速度是什么?(智能手机内部存储 vs. SD 卡 vs. PC 非 SSD 硬盘)
  • 我知道为我的具体应用程序进行基准测试是必要的,但我也欢迎在这个问题上得到理论上的澄清。

    重要提示:当我问“…在寻找方面是否像 PC 硬盘一样有效?”时,我不仅指绝对值,还包括机制。也就是说,如果它基于相同的逻辑原则工作(=尽可能跳过大部分内容),或者存在一些缺陷(例如,在 SD 卡上无法进行“跳过式”查找,因此在智能手机硬件上,“跳过式”操作比在 PC 硬盘上无用得多,即非成比例的)。


    2
    典型的数据读取速度是多少?它因系统/设备而异,因为它与处理器和芯片组绑定。在这种情况下,现代智能手机可能比赛勒隆处理器计算机更快,同样地。 - Lucifer
    1
    关于 Klaus Villaca 回答中的“查找总是一个缓慢的任务”这个说法,我不同意。这并不是普遍的真理;例如根据我所听到的,在 SD 卡上,它甚至可能比在硬盘上更快(由于 SD 卡硬件的性质)。也就是说,在 SD 卡上选择一个随机位置可能比在 PC 硬盘上更快。 - Thomas Calc
    2个回答

    2

    尝试回答你的问题

    1. 唯一的区别在于,如果你的文件在应用程序包中(即在应用程序内部),因为你需要使用不同的方法打开它,但是如果它在应用程序包中并且在package/file/中,则可以使用相同的File file bla..。

    2. 智能手机的内存比硬盘驱动器快,但是如果你将其存储在外部SD卡中,则会发生变化,因为SD卡的读写速度有最大值。

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

    4. 寻找始终是一个缓慢的任务,你可以一旦获取了所需的所有数据就关闭流,即使你没有到达文件的结尾。你可以做的是每次你的应用程序读取一些KB或MB的数据时重新加载缓存...然后你可以启动一个异步任务去加载它,一旦主线程完成,就会查找更多数据(如果存在)。这样应该会加快速度,因为你只会在内存中搜索。

    5. 你需要一个应用程序或编写自己的应用程序,这不应该太困难,你可以使用handler,在数组或列表中加载尽可能多的数据,并计算字节数,然后在其他内存类型(内部SD卡和外部SD卡)上重复此操作。


    1
    谢谢你的回答。关于问题#4:实际上,这是我最重要的问题,我从不同的角度考虑它。(我的软件组件在单独的线程中运行,因此响应性对我来说不是问题。)我实际上想知道“寻找”是否像在PC硬盘上一样高效。换句话说,读取2MB并不是什么大问题,所以问题是寻找本身是否有效。因为我们从一个2GB的文件中读取2MB。如果寻找不高效,那么它将比读取单独的2MB文件需要更多的时间。在PC上,寻找是高效的。 - Thomas Calc
    我不同意“查找总是一项缓慢的任务”的说法。这并不完全正确;例如,根据我所听到的,在SD卡上,查找甚至可能比在硬盘上更快(由于SD卡硬件的性质)。也就是说,从随机位置读取可能比在PC硬盘上更快。 - Thomas Calc

    1

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

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

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

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


    谢谢,这很有帮助,包括链接。问题并不是非常具体,但我同意它需要很多数据。Stackoverflow也是一种在线“词典”,所以我认为这没问题。 :-) - Thomas Calc

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接