У меня есть приложение, которое в основном представляет собой читатель PDF.Я загружаю PDF из Интернета и создаю эскизы для этого PDF.Однако, кажется, что когда я генерирую эти миниатюры, выделяется лот памяти (проверяется с помощью инструментов), иногда части этого собираются GC, но в конце концов мое приложение сдается.У меня было до 38 Мб памяти при создании миниатюр для одного PDF (100х100 больших пальцев, ~ 60 страниц).
Я создаю один эскиз за раз, сохраняю его и затем повторяю процесс, поэтому в разделеПри любых обстоятельствах в памяти должен быть только один эскиз (по крайней мере, при их создании).Мой код для создания миниатюр выглядит следующим образом:
public UIImage GetPageThumbnail(int pageNumber, SizeF size)
{
//If using retina display, make sure to scale-up the thumbnail as well.
size.Width = size.Width * UIScreen.MainScreen.Scale;
size.Height = size.Height * UIScreen.MainScreen.Scale;
UIGraphics.BeginImageContext(size);
CGContext tempContext = UIGraphics.GetCurrentContext();
CGPDFPage page = Document.GetPage(pageNumber);
RectangleF drawArea = new RectangleF(new PointF(0f, 0f), size);
CGAffineTransform transform = page.GetDrawingTransform( CGPDFBox.Crop, drawArea, 180, true); //fit PDF to context
transform.xx = -transform.xx; // }
transform.x0 = 0; // }flip horizontally
//Console.WriteLine("XX: " + transform.xx + ", YX:" + transform.yx + ", XY:" + transform.xy + ", YY:" + transform.yy + ", X0:" + transform.x0 + ", Y0:" + transform.y0);
tempContext.ConcatCTM(transform);
tempContext.DrawPDFPage (page);
UIImage returnImage = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
return returnImage;
}
Я пытался явно избавиться от контекста и страницы PDF, но это не дало эффекта (на самом деле это выглядело хуже, но примите это с щепоткой соли).
Я видел несколько постов об утечке памяти с помощью MonoTouch и PDF (в основном в этом посте ), но это довольно старо.Я использую новейший MonoTouch (5.0.2).