Core Dataのデータを日付順に高速でソートしたい
現在取り組んでいるアプリで、データ数が多くなるとページを切り替える時に一瞬遅れる。
うーん、気持ち悪い。
という状況なのでCore Dataでのデータの持ち方を再考中。
その過程で気になることがあったので実機でテストしてみました。
NSSet *datas;
ここにCore Dataから得た一連のデータが入れます。
NSArray *sortDiscriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES], nil];
各データはdateってプロパティ名でNSDateクラスのデータを持っています。
このdateで日付順にソートするのが目的であります。
NSArray *datasArray = [datas sortedArrayUsingDescriptors:sortDiscriptors];
↑これでソート。
この前後で時間を実機で計測しました。
その結果、、、
1)データ数が1000個程度だと、840msec程度(こりゃ問題だ)
2)データ数が1000個程度だと、処理時間はデータのn数にほぼ比例
もしかしたら、処理時間はデータ数に対して指数関数的に増えていくのかな?
そうすると、データを分割して、、、なんて思ったんだけど、比例するんだから、1000個を1回するのと、(データの持ち方を工夫して)100個を10回するのもたいして変わらないんだろうな。
うーん、こりゃ困った。
む!
もしかしてNSDate型でソートすると、時間がかかるんじゃね?
もっとシンプルにNSInteger型だったらいいんじゃね?
なんて思って、日付を"20100101"ってNSInteger型のプロパティを持たして、比較してみたところ、、、
ほとんど変わりませんでした。
結果の追加
3)データ数が1000個程度だと、NSDate、NSIntegerのどちらでソートしても変わらなかった
あっかーん!orz
うーん、気持ち悪い。
という状況なのでCore Dataでのデータの持ち方を再考中。
その過程で気になることがあったので実機でテストしてみました。
NSSet *datas;
ここにCore Dataから得た一連のデータが入れます。
NSArray *sortDiscriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES], nil];
各データはdateってプロパティ名でNSDateクラスのデータを持っています。
このdateで日付順にソートするのが目的であります。
NSArray *datasArray = [datas sortedArrayUsingDescriptors:sortDiscriptors];
↑これでソート。
この前後で時間を実機で計測しました。
その結果、、、
1)データ数が1000個程度だと、840msec程度(こりゃ問題だ)
2)データ数が1000個程度だと、処理時間はデータのn数にほぼ比例
もしかしたら、処理時間はデータ数に対して指数関数的に増えていくのかな?
そうすると、データを分割して、、、なんて思ったんだけど、比例するんだから、1000個を1回するのと、(データの持ち方を工夫して)100個を10回するのもたいして変わらないんだろうな。
うーん、こりゃ困った。
む!
もしかしてNSDate型でソートすると、時間がかかるんじゃね?
もっとシンプルにNSInteger型だったらいいんじゃね?
なんて思って、日付を"20100101"ってNSInteger型のプロパティを持たして、比較してみたところ、、、
ほとんど変わりませんでした。
結果の追加
3)データ数が1000個程度だと、NSDate、NSIntegerのどちらでソートしても変わらなかった
あっかーん!orz
<< Core Dataのデータを日付で高速に抽出したい TopPage drawRect:内でUILabelオブジェクトを作ったらダメなの? >>
トラックバック
トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/456-6c7b7def
http://ringsbell.blog117.fc2.com/tb.php/456-6c7b7def