私はこのアプリを設計しており、ユーザーが指で描くことができるセクションがあります。操作の取り消しを行うと、ユーザーが描画を開始するときに、現在の描画コンテンツをすばやく把握してどこかに保存する必要があります。iPhone - ディスクのボトルネックを改善する
私は最初にアンドゥをCGLayerとして、また画像として保存しようとしましたが、私のアプリのメモリ使用量は7Mbから19Mbに増加しました。 19 MBでは、比較的安全です。なぜなら、24 Mbは、物事を超えて理論上の限界であるように見えます。問題は、私は多くのメモリを必要とする私のアプリケーションの別のセクションを持っていると私はこれを実行すると、メモリは19から28メガバイトにピーク、それは危険にさらされる危険です。
次に、ディスクにイメージを保存することにしました。ユーザーがTouchesBeganを起動したときに画像を保存しなければならないときに起こる小さな隙間を防ぐために、私は洗練された範囲で、ディスクメソッドへの節約を行いましたが、今はほとんどギャップを感じません。私はほとんど感じていないが、私はまだ少しの毛の隙間を感じると言った、私は< 0.1sライン開始の描画にかかると言うだろう。
ファイルの保存を管理するキュー操作を起動します。
あなたがこれを改善する方法を想像できる他の方法はありますか?
おかげ
ありがとうございます。あなたは、あなたが何を言っているかを模範的に示すリンクやコードを持っていますか?**全体の画像**を取得しているかどうかわかりません。:) – SpaceDog
空のキャンバスから始めましょう。ユーザーが描画操作を実行すると、それらを再生できるようにキューに記録します。ユーザーが取り消しを押すと、キャンバスを消去してキュー内の操作を再生します(最後のものを除く)。キューが長すぎると、元に戻す操作に時間がかかり、ユーザーエクスペリエンスが低下します。 – rpetrich
これはスナップショットが入る場所です。すべてのn個のコマンドは、フロントバッファの生の内容をディスクに保存するので、取り消し「再生」プロセスは最初から部分的にレンダリングされたイメージから開始することができます。最適化として、ファイルディスクリプタをメモリバッファとして扱うことができるように、mmapを使うことをお勧めします。ファイルを開き、必要なサイズに展開し、先頭に戻り、mmapしてmemory-受け取ったアドレスをCGBitmapContextCreateに渡して、直接ディスクに書き込むCGContextを取得することもできます。 – rpetrich