Как загрузить картинки в Zune XNA без нехватки памяти? - PullRequest
2 голосов
/ 29 июня 2009

Я пишу программу XNA, которая отображает изображения из определенного фотоальбома на Zune. Проблема в том, что, если я загружаю текстуры со всех картинок в альбоме, программе не хватает памяти. Я попытался загрузить одну за другой и вызвать Dispose к предыдущей текстуре изображения, как только пользователь перейдет к следующему изображению. Это работает, но тогда я не могу вернуть текстуру с предыдущего изображения, как только оно будет удалено, поэтому пользователь не сможет просмотреть прошлые изображения без перезапуска программы!

Ответы [ 2 ]

1 голос
/ 29 июня 2009

Не сохраняйте маркер текстуры для каждого элемента в вашем альбоме. Вместо этого используйте один дескриптор уровня программы, который вы располагаете и загружаете по мере необходимости, когда пользователь просматривает альбом.

0 голосов
/ 01 июля 2009

Я бы посоветовал выполнить всю вашу обработку данных только один раз и сохранить имя файла (поэтому вам нужно выполнить всю иерархию / сортировку только один раз). Тогда загружайте картинку только тогда, когда вы хотите (именно то, что предлагалось в предыдущем посте).

Проблема этого метода заключается в том, что Content.Load (строка) будет загружать вашу текстуру, однако, если вы потеряете все указатели на текстуру, ContentManager сохранит текстуру в памяти, так что если вы загрузите ее снова, она загрузится мгновенно. Существует метод Content.Unload (), который удаляет эти кэшированные элементы, см .:

Обсуждение на форуме по этой теме:
http://forums.xna.com/forums/p/25978/141761.aspx
Шон Харгривз объясняет это:
http://blogs.msdn.com/shawnhar/archive/2006/09/06/743437.aspx

Способ, которым я бы это реализовал, заключается в том, чтобы вызывать unload каждый раз, когда вы прекращаете использовать изображение, или если вы хотите ускорить загрузку (это зависит от того, как часто пользователь меняет изображение, если он действительно должен пролистывать изображение). быстрая выгрузка каждый раз - плохая идея) попробуйте перехватить исключения из памяти и вызвать только выгрузку.

...