大量のデータを扱う時のメモリ消費に注意する

データベースのリソースが非常に高価だったり、負荷分散が難しい場合なんかの場合は、アプリの方で検索結果をキャッシュしたりするわけだけど、レコード数が十万を超えてくるとかなりメモリを食ったりする。
データベースが使い放題の場合はあえて毎回データを取ってくるのもありかも。


あとCocoaの場合autoreleasedなオブジェクトはpoolを解放しない限りpool内のオブジェクトも解放しないので、バッチ処理のループ内で一時的なオブジェクトを生成している場合などには何らかの対処が必要になる(GUIアプリの場合は、イベントループに復帰する際にリリースされる。) 下のような感じでループ内でNSAutoreleasePoolを作って一ループごとに解放するのもいいかもしれない。

    NSEnumerator *enumerator = [targets objectEnumerator];
    id aTarget;
    while (aTarget = [enumerator nextObject]) {
        NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];

        // 一時的なオブジェクトをそれなりに作る処理

        [innerPool release];
    }

ループの途中で脱出する(例外も含めて)ような場合にはリリース漏れが無いように注意。