В 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<Texture2D>("images/"+image);
image_a = Content.Load<Texture2D>("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. Проходя по списку, я избавлялся от объектов текстуры предыдущего элемента списка и загружал текстуры следующего элемента списка в его объекты текстуры. Список будет проходить только один раз в течение всей игры, просто периодически я буду переходить к следующему набору текстур, и я выберу только 2 текстуры для загрузки, поэтому теоретически в памяти всегда должны быть только 2 текстуры. , Я все еще столкнулся с ошибкой памяти. Как будто я совсем не могу полагаться на метод dispose для своевременного освобождения текстур из памяти.
Ни одна из загружаемых текстур не превышает 125 КБ, я создаю их для Windows Phone 7
Какой лучший способ отбрасывать текстуры, которые мне больше не нужны? Ссылаясь на код: нужно ли вместо этого создавать новые объекты texture2d, менять их местами и утилизировать оригиналы?