1

mkDirs私のAndroidアプリケーションのコードには、単純なメソッドがあります:

public static File mkDirs(File dir) {
    long start = System.currentTimeMillis();
    if (!dir.exists()) {
        dir.mkdirs();
        System.out.println("*** mk dir, cost: " + (System.currentTimeMillis() - start) + "ms");
    }
    return dir;
}

アプリケーションで何度も呼び出して、sdcard にディレクトリを作成しました。パスは に基づいていEnvironment.getExternalStorageDirectory()ます。

そして、これはログです:

11-09 21:40:18.002: INFO/System.out(28259): *** mk dir, cost: 2181ms
11-09 21:40:20.504: INFO/System.out(28259): *** mk dir, cost: 1629ms
11-09 21:40:20.570: INFO/System.out(28259): *** mk dir, cost: 36ms
11-09 21:40:20.635: INFO/System.out(28259): *** mk dir, cost: 38ms
11-09 21:40:20.697: INFO/System.out(28259): *** mk dir, cost: 35ms
11-09 21:40:20.760: INFO/System.out(28259): *** mk dir, cost: 38ms
11-09 21:40:20.827: INFO/System.out(28259): *** mk dir, cost: 34ms
11-09 21:40:20.909: INFO/System.out(28259): *** mk dir, cost: 52ms
11-09 21:40:20.970: INFO/System.out(28259): *** mk dir, cost: 35ms
11-09 21:41:17.433: INFO/System.out(28259): *** mk dir, cost: 24184ms
11-09 21:42:42.570: INFO/System.out(28259): *** mk dir, cost: 1593ms
11-09 21:44:26.709: INFO/System.out(28259): *** mk dir, cost: 1254ms

非常に高速な場合もあれば、20 秒以上の非常に遅い場合もあります。

RAMが原因である可能性があると思います.512Mでは十分ではなく、バックグラウンドで実行されている他のアプリケーションもあります。

そこで、電話を再起動してアプリケーションを再起動しました。ログは次のとおりです。

11-09 22:17:27.680: INFO/System.out(1000): *** mk dir, cost: 1983ms
11-09 22:17:35.138: INFO/System.out(1000): *** mk dir, cost: 2752ms
11-09 22:17:36.020: INFO/System.out(1000): *** mk dir, cost: 37ms
11-09 22:17:36.080: INFO/System.out(1000): *** mk dir, cost: 34ms
11-09 22:17:36.159: INFO/System.out(1000): *** mk dir, cost: 54ms
11-09 22:17:36.221: INFO/System.out(1000): *** mk dir, cost: 38ms
11-09 22:17:36.281: INFO/System.out(1000): *** mk dir, cost: 34ms
11-09 22:17:38.294: INFO/System.out(1000): *** mk dir, cost: 1988ms
11-09 22:17:39.499: INFO/System.out(1000): *** mk dir, cost: 413ms
11-09 22:17:39.577: INFO/System.out(1000): *** mk dir, cost: 49ms
11-09 22:18:41.583: INFO/System.out(1000): *** mk dir, cost: 810ms
11-09 22:18:46.768: INFO/System.out(1000): *** mk dir, cost: 811ms

今回ははるかに優れており、最大時間が 3 秒未満であることがわかります。

そして、1G RAMを搭載した別のAndroidパッドでテストしました。ログは次のとおりです。

11-09 21:58:36.770: INFO/System.out(13647): *** mk dir, cost: 2ms
11-09 21:58:36.949: INFO/System.out(13647): *** mk dir, cost: 3ms
11-09 21:58:37.027: INFO/System.out(13647): *** mk dir, cost: 2ms
11-09 21:58:37.035: INFO/System.out(13647): *** mk dir, cost: 1ms
11-09 21:58:37.035: INFO/System.out(13647): *** mk dir, cost: 1ms
11-09 21:58:38.723: INFO/System.out(13647): *** mk dir, cost: 2ms
11-09 21:58:38.730: INFO/System.out(13647): *** mk dir, cost: 2ms
11-09 21:58:38.754: INFO/System.out(13647): *** mk dir, cost: 1ms
11-09 21:58:38.770: INFO/System.out(13647): *** mk dir, cost: 1ms
11-09 21:58:38.785: INFO/System.out(13647): *** mk dir, cost: 1ms
11-09 21:58:38.855: INFO/System.out(13647): *** mk dir, cost: 5ms
11-09 21:58:38.887: INFO/System.out(13647): *** mk dir, cost: 2ms
11-09 21:58:38.926: INFO/System.out(13647): *** mk dir, cost: 7ms
11-09 21:58:38.934: INFO/System.out(13647): *** mk dir, cost: 1ms
11-09 21:58:38.949: INFO/System.out(13647): *** mk dir, cost: 2ms
11-09 21:58:59.871: INFO/System.out(13647): *** mk dir, cost: 4ms
11-09 21:59:06.176: INFO/System.out(13647): *** mk dir, cost: 7ms

いつも高速でご覧いただけます。

また、Android sdcard-testing アプリケーションで sdcard をテストしました。書き込み速度は 3.x M/s、読み取り速度は 7.x M/s で、十分に高速です。

その理由は次のとおりだと思います。RAMが十分でない場合、IO操作はいつか非常に遅くなります。それは本当ですか?


更新: この質問を書き直して、不要な情報を削除しました。

4

0 に答える 0