В XNA, какой лучший способ избавиться от текстур, которые мне больше не нужны?
Я начал проект с концепции повторного использования одних и тех же объектов texture2d в течение игры, периодически перезагружая новые текстуры. Со временем это оказалось плохой идеей, так как я работал в: System.OutOfMemoryException
bool loadImages(string image)
{
System.Diagnostics.Debug.WriteLine("beginning loading textures " + image);
try
{
//image_a = null;
//image_o = null;
//image_o.Dispose();
//image_a.Dispose();
image_o = Content.Load("images/"+image);
image_a = Content.Load("images/" + image+"_a");
return true;
}
catch
{
System.Diagnostics.Debug.WriteLine("cannot load textures " + image);
image_a.Dispose();
image_o.Dispose();
}
return false; //make sure the caller loads the subsequent image
}
Я догадывался, что XNA держится за прошлые текстуры с каждой новой загрузкой контента, поэтому я переписал программу, чтобы вместо этого содержать список игровых объектов, каждый из которых имеет свои собственные объекты texture2d. После прохождения списка я бы избавился от предыдущего пункта спискаs текстурные объекты и загрузка следующего элемента списка 's текстуры для своих текстурных объектов. Список будет проходить только один раз в течение всей игры, просто периодически я буду переходить к следующему набору текстур, и я выберу только 2 текстуры для загрузки, поэтому теоретически в памяти всегда должны быть только 2 текстуры , Я все еще столкнулся с ошибкой памяти. Это'как будто я могуВообще не полагайтесь на метод dispose для своевременного освобождения текстур из памяти.
Ни одна из текстур, которые ям загрузка более 125 КБ, ям строит это для windows phone 7
Какой лучший способ отбрасывать текстуры, которые мне больше не нужны? Ссылаясь на код: нужно ли вместо этого создавать новые объекты texture2d, менять их местами и утилизировать оригиналы?