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操作はいつか非常に遅くなります。それは本当ですか?
更新: この質問を書き直して、不要な情報を削除しました。