14

私の Android アプリケーションは、大きなファイルと非常に大きなファイル (つまり、サイズが 10MB から 2GB の間) を使用します。

安定したストレージのためにスマートフォンで使用されているハードウェアと、ソフトウェア (ファイルの読み取り/シーク) の考慮事項が PC のハードディスクと同様であるかどうかについて、私は常に疑問に思っていました。ハードウェアに関する情報を探して、それに関する何らかの画像 (内部ストレージ、SD カード) を見つけようとしましたが、調べた情報源のどれも包括的または具体的ではありませんでした。私の(相互に関連する)質問は次のとおりです。

  1. PC 用の Java アプリケーションで同じことを行うのと比較して、「最新の」スマートフォン (Android 2.2 フォンなど) で大きなファイルを読み取るときに考慮しなければならない主な違いは何ですか? (ディスクのシーク/読み取りパフォーマンスに関しては、明らかに、携帯電話のRAMはPCよりも小さいため、バッファなどの場合はこれを考慮する必要があります.)
  2. スマートフォンで使用されている安定したストレージ ハードウェアと PC のハードディスクとの (関連する) 主な違いは何ですか? (これは非常に幅広い質問であることを知っているので、ここでの非常に簡単な回答と、おそらくいくつかの信頼できる外部 URL に感謝します)
  3. 読み取りとシーク(skipBytes)に関してInputStream、内部ストレージとSDカードの使用に違いがありますか(Androidなど)(すべてのデバイスのSDカードであるとは限らないため、意図的に「外部ストレージ」とは書きませんでした) )? SDカードは遅いですか?
  4. たとえば、2GB のファイルから 2MB のデータを読み取りたいとします。この 2MB のデータは、ファイルのさまざまな/離れた部分に分散しています。すべてのオフセットが既知であるため、オフセットの昇順を作成し、BufferedInputStream.read()(たとえば a でDataInputStream) を使用してそれらを読み取ります (skipBytes()必要な場合はシークに使用します)。したがって、基盤となるファイル システムでは、2 GB のファイル全体を「処理」する必要がある場合があります。(たとえば、Android は必要に応じて Linux の機能を使用してファイルをシークします。) しかし、シークは PC のハードディスクと同じくらい効率的ですか? シーク効率の観点から、SD カードと内部ストレージはどうですか?
  5. 一般的なデータ読み取り速度は? (スマートフォンの内部ストレージ vs. SD カード vs. PC 非 SSD ハードディスク)

具体的なアプリケーションのベンチマークが必須であることはわかっていますが、この問題の理論的な説明も歓迎します。

重要: 「... PC のハードディスクと同じくらいの効率を求めていますか?」と尋ねるとき、私は絶対値を意味するのではなく、そのメカニズムも意味します。つまり、同じ論理原則に基づいて機能する場合 (= 可能な限り大きな部分をスキップする)、またはいくつかの欠点がある場合 (たとえば、そのような「スキップベースの」シークは SD カードでは不可能であり、したがってスキップははるかに多くの - - つまり、不均衡- PC のハードディスクよりもスマートフォンのハードウェアでは役に立たない)。

4

2 に答える 2

2

あなたの質問に答えようとしています

  1. 違いは 1 つだけです。ファイルがアプリ パッケージ (アプリ内) 内にある場合は、別の方法でファイルを開く必要があるためです。ただし、アプリ パッケージ内でpackage/file/にある場合は、同じファイル ファイルを使用できますブラ.. .

  2. スマートフォンの内部メモリは HDD よりも高速ですが、外部 SD カードに保存すると、SD カードの読み取りと書き込みの速度が最大になるため、これは変わります。

  3. はい、違いがあります...内部またはSDカード(外部SDカードではない)から読み取る場合、その他の場合、ストレージに1または2GBおよび16Gbのデバイスを使用しないでください。そのメイン メモリ内にあるものはすべて、より高速に実行されます。

  4. シークは常に遅いタスクです。ファイルの最後に到達していなくても、ストリームを閉じる必要があるすべての日付を取得できます。高速化するためにできることは、アプリが一定量の KB または MB を読み取るたびにキャッシュをリロードすることです... asyncTask をランチしてロードするよりも、メイン スレッドが終了すると、より多くのデータを探します。存在する場合。メモリ内だけで検索するため、これは大幅に高速化されるはずです。

  5. そのためのアプリが必要になるか、独自のアプリを作成する必要がありますが、それほど難しくないはずです。ハンドラーを使用して、配列またはリストにできるだけ多くをロードし、バイトを数えて、他のメモリタイプで繰り返すことができます(内部 SD カードと外部 SD カード)。

于 2012-10-31T01:37:56.283 に答える
1

あなたの質問は具体的すぎて、あまりにも多くのデータを求めています :-) 非常に具体的な要件を持つ他の人を見つけるのは難しいと思います.

一般に、SD カードのデータ アクセス速度は、ドライバー ハードウェア (デバイス) だけでなく、カード自体とアクセスするソフトウェア (Android バージョン) にも依存します。

一方、SD カードの速度に関する情報は次の場所にあります。

Google Play でも、デバイスの SD カードの速度をテストするアプリを見つけることができます (SD カード テスター、SD ツールなどを検索してください)。

于 2012-10-31T00:04:34.830 に答える