Copyright (C) iPhoneアプリ開発備忘録 All rights reserved.
ブログ内で記したコード、内容の正確性は保証いたしません。
記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。



2016年02月20日

Core DataでsetFetchBatchSizeを0にするとデータ量に比例して読み込みが遅くなる場合の対処



Core DataでFetchをかけるとき、1度に読み込むサイズ(setFetchBatchSize)を0にすると、登録されているデータ量に比例して、読み込み処理時間が遅くなる場合の対処法。

対処法: setFetchBatchSizeを1以上に設定する。

サンプルソースや、XcodeからCore Dataを使用するプロジェクトを作成すると、デフォルトで20が設定されているので、20〜50くらいの範囲に設定するのが望ましいだろう。

TableViewと連動するFetchの場合、スクロール量に応じてsetFetchBatchSizeで設定したデータ件数が読み込みされるので、その都度スクロールがカクカクした動作となり、UXが損なわれるので、いい按配となるようにsetFetchBatchSizeに設定する値を調整する必要がある。

setFetchBatchSizeを明示的に設定しない場合のデフォルト値は0。

Core DataのEntityに設定されているデータがNSStringなどの値であればデータ量は軽めなので、setFetchBatchSizeは0でもさしたる問題とはならないが、EntityにNSDataに変換した画像データを登録している場合、読み込み時間を要してしまい、画面描画するまでに数秒〜数十秒かかるなどしてUXが損なわれる。

この場合は、setFetchBatchSizeを20〜50くらいの範囲に設定することにより、読み込み時間の短縮が図られる。

これは、TableViewと連動するFetchの場合でも、一度に全データを読み込む必要があるFetchでも同様である。

Core DataのEntityに設定されているデータ量がNSStringなどのみで軽めであれば、setFetchBatchSizeを0としていても、読み込み時間は短く、TableViewのスクロール時のカクつきもなくUXも優れたものとなるが、画像データも一緒に登録されているEntityのFetchの場合、読み込み時間を要してしまうため、setFetchBatchSizeを20〜50くらいの範囲に設定するのが望ましい。

タグ:Mac apple iPAD IOS iPhone
posted by mobileDeveloper at 23:41 | Comment(0) | TrackBack(0) | Core Data はてなブックマーク - Core DataでsetFetchBatchSizeを0にするとデータ量に比例して読み込みが遅くなる場合の対処 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
Apple、Appleのロゴ、App Store、iPodのロゴ、iTunesは、米国および他国のApple Inc.の登録商標です。
iPhone、iPod touch、iPadはApple Inc.の商標です。
iPhone商標は、アイホン株式会社のライセンスに基づき使用されています。
その他、本ブログに記載されている製品名、会社名は、それぞれ各社の商標または登録商標です。