Избегайте нескольких сегментов / фрагментов LOH при работе с изображениями - PullRequest
0 голосов
/ 14 апреля 2019

Я пишу приложение для обработки изображений.Алгоритм выглядит следующим образом: во-первых, я загружаю набор фоновых изображений (~ 1,5 МБ каждое) либо из локального кэша, либо из Интернета.Затем я загружаю несколько изображений переднего плана (~ 1 МБ каждое), масштабирую их для каждого изображения bg.

Я загружаю все изображения bg и сохраняю их в памяти (все они переходят в LOH), пока все изображения переднего плана обрабатываются.обработано.

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

Дело в том, что существует несколько LOHсегменты, созданные для хранения больших байтовых массивов.Они занимают довольно много памяти, и GC, похоже, не собирает ее после завершения обработки.Когда приходит новый запрос, другой набор изображений bg загружается в память (LOH) и т. Д.

Я думал о пуле массивов, но я думаю, что это неприменимо в моем приложении.

Таким образом, мой вопрос заключается в том, как управлять большими изображениями / байтовым массивом и избежать фрагментации LOH?

...