Web サービスからファイルをダウンロードするアプリを作成しています。
ファイルのダウンロード方法は次のとおりです。
- Web サービスから、ファイルのリストをダウンロードします。ファイル数が多すぎる場合は、最初のグループのファイルをダウンロードします。各グループの最大数は不明です。ダウンロードしたファイルは、システムの一時ディレクトリに保存されます。
- ファイルごとに、ファイルのファイル名とシステムの一時フォルダー内の一時的なファイル名、およびその他の属性を含む FileDescriptor (カスタム) クラスを作成します。b FileDescriptor はリストに保存されます。
- ここでいくつかのビジネス ロジックを実行します。
- ファイルの次のグループがあればダウンロードします。
FileDescriptor のリストを保存するために使用したコレクションは、LinkedList です。ただし、ファイルのグループごとに、新しい LinkedList を作成して FileDescriptor を保持します。擬似コードは次のようなものです。
do {
List<FileDescriptor> list = new LinkedList<FileDescriptor>();
GroupOfFiles group = webService.getGroupOfFiles();
Iterator<File> itr = group.iterator();
while(itr.hasNext) {
list.add(new(FileDescriptor(itr.next()));
}
<My Business Logic here>
} while(group.hasMoreGroups());
お分かりのように、新しいファイル グループが取得されるたびに、新しい LinkedList を作成します。ファイルのグループが処理されると、LinkedList は不要になります。各グループに含めることができる最大数が不明であるため、1 つのリストを作成して再利用することはできません。
このようなコードを使用し、何百万ものファイルがある場合、たとえば、各グループは最大 1000 個のファイルしか使用できず、大量の LinkedList (およびその要素) がガベージになります。これは何か良いことですか?このシナリオでそれを処理するためのより良い方法があると確信しています。
ご意見をお聞かせください。
どうもありがとう。