Monotouch: манипулирование многими изображениями - Недостаточно памяти - PullRequest
2 голосов
/ 30 ноября 2011

Я ищу способ обработки множества изображений, но не хватает памяти.Когда мое приложение запускается впервые, оно должно создать несколько миниатюр и сохранить их локально.Это происходит только один раз.

Я получаю ошибки памяти, хотя.

Примерно так:

 [Loop BigPaths]
  sourceImg = UIImage.FromFile (nextBigpath);
  img = UIImageTools.MakeSquare (sourceImg, 50,3);
  img.AsJPEG ().Save (path, NSDataWritingOptions.Atomic, out err);
  sourceImg.Dispose ();
  sourceImg = null;
  img.Dispose ();
  img = null;     
  [end loop]

ОБНОВЛЕНИЕ :

Чтобы исправить это, я теперь вызываю GC.Collect () после каждых 10 элементов, ожидая 50 миллисекунд в Thread.Sleep ().

Я также сделал sourceImg img определено вне цикла.

С этими 2 изменениями я больше не получаю ошибки памяти.

1 Ответ

1 голос
/ 01 декабря 2011

Это решение, которое я нашел сработавшим.

Создайте переменные изображения вне цикла и используйте их повторно, убедившись, что после каждого использования вызывается .Dispose ().

После 50 изображенийвызовите GC.Collect (), затем Thread.Sleep (50), чтобы дать GC время на очистку.

После этого проблем с памятью не было.

...