PDFリーダーの場合、各ページの「スクリーンショット」を作成してディスクに保存してドキュメントを作成します。PDFメモリ割り当て(CGPDFDocumentRef)の秘訣は何ですか(tf)
MEMORY BEFORE: 6 MB
MEMORY DURING 1ST DOC: 40 MB
MEMORY AFTER 1ST DOC: 25 MB
MEMORY DURING 2ND DOC: 40 MB
MEMORY AFTER 2ND DOC: 25 MB
....
:最初のアプローチは
CGPDFDocumentRef document = CGPDFDocumentCreateWithURL((CFURLRef) someURL);
for (int i = 1; i<=pageCount; i++)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
CGPDFPageRef page = CGPDFDocumentGetPage(document, i);
...//getting + manipulating graphics context etc.
...
CGContextDrawPDFPage(context, page);
...
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
...//saving the image to disc
[pool drain];
}
CGPDFDocumentRelease(document);
これは、ループの最初の実行後にリリースされていないようです多くのメモリになり
(第一文書を作成する)が、追加の実行中にこれ以上の未発表のメモリであります
for (int i = 1; i<=pageCount; i++)
{
CGPDFDocumentRef document = CGPDFDocumentCreateWithURL((CFURLRef) someURL);
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
CGPDFPageRef page = CGPDFDocumentGetPage(document, i);
...//getting + manipulating graphics context etc.
...
CGContextDrawPDFPage(context, page);
...
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
...//saving the image to disc
CGPDFDocumentRelease(document);
[pool drain];
}
にコードを変更する
にメモリ使用量を変化させますしかし、明らかにパフォーマンスが後退しています。
最初のケースではPDF(後で別のスレッド)を読み始めると、それ以上のメモリは割り当てられません(25 MBに留まる)が、2番目のケースではメモリは20 MB(7から)になります。
どちらの場合も、CGContextDrawPDFPage(context, page);
のラインメモリを削除すると、ドキュメントの準備中および作成後に6MBの(ほぼ)一定です。
誰でも何が起こっているのか説明できますか?
ありがとう、私には意味があるので、実際にそれを証明せずに「正しい」とマークしました。 –
こんにちはomz。詳細な説明はありがとうございます。私は同様の問題を抱えています。私はページのレンダリングを続けるとメモリ使用量が大幅に増加しています。アプリケーションはある時点でクラッシュしています。各ページに別々のPDFDocumentを使用していますdrawLayer:inContext:method.pleaseで作成されてリリースされたページを、ページコンテンツの自動キャッシュを回避し、メモリ使用量を減らすための提案をします。 – Hariprasad
@ハリプラサド私はあなたと同じ問題を少し持ちます。そして私はそこに何か解決策を見つけることができません。フレームワークのバグその他がリリースだと言う人もいますが、私はすべてをリリースしたと思います。私はリークや何かを持っていないとまだいくつかの時点でクラッシュします。あなたはこれに対する解決策を見つけましたか? – otakuProgrammer