私はディスクからファイルを読み取り、それを行ごとに分離し、それをに格納してから、NSArray
その配列をループして、データに対してかなり基本的な操作を実行しようとしています。ただし、小さいファイル(〜5000行のデータ、1行に1ワード)を使用している場合、ループの終わりまでに数百メガバイトのメモリを使用することになります。非常に大きなファイル(〜200,000行)を使用している場合、数ギガバイトのメモリを使用することになります。なぜこれが起こるのですか?ファイルをアレイにロードすると、メモリの最初のスパイクが表示されるはずですが、その後、メモリ使用量はかなり一定に保たれるはずです。私はARCを使用していましたが、それを信用していなかったので、今はすべてのメモリ管理を自分で行っており、ループで割り当てたすべての一時的なものを解放していると確信しています。
NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSScanner *scanner = [NSScanner scannerWithString:fileContents];
NSMutableArray *wordList = [[[NSMutableArray alloc] init] autorelease];
while (![scanner isAtEnd]) {
NSString *line = [[NSString alloc] init];
[scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&line];
[wordList addObject:line];
[line release];
}
return wordList;