只有一个默认相机和一个GameObject。这段代码为什么会造成内存泄漏?
为什么销毁的游戏对象仍然在内存中?我试图手动调用GC,Resources.UnloadUnusedAssets和其他一些黑客没有成功。 我的游戏需要随时创建GameObjects ... ObjectPooling当然可以完成,但由于玩家将玩数小时,并且有大量不同的精灵,我认为这仍然是一个问题。
public class Game : MonoBehaviour
{
private List<GameObject> objects;
// Use this for initialization
void Start()
{
this.objects = new List<GameObject>();
}
// Update is called once per frame
void Update()
{
foreach (var item in this.objects)
{
Destroy(item);
}
this.objects = new List<GameObject>();
for (var i = 0; i <= 1000; i++)
{
GameObject gb = new GameObject();
gb.name = i.ToString();
SpriteRenderer renderer = gb.AddComponent<SpriteRenderer>();
renderer.sprite = Resources.Load("Sprites/grass", typeof(Sprite)) as Sprite;
gb.transform.position = new Vector3(i, transform.position.y, transform.position.z);
this.objects.Add(gb);
}
}
}
你创建和每一帧摧毁了太多的对象,没有游戏将永远需要一个 – Lestat
@Lestat我的游戏本身不产生许多对象每一帧....此代码是精心策划,以重现问题一个简单的方式...我会很感激,如果有人回答为什么内存永远不会释放(并保持永远增长)在这样一个简单的代码...谢谢。 –
您好,问题是'gb.AddComponent()'如在我的答案提及。您可以评论该代码行以验证该声明。你需要在我的答案中链接两个对象池。 –
Programmer