在方法上创建的所有变量都被销毁了,然后程序完成了吗?

时间:2019-04-25 10:00:08

标签: c# unity3d

我正在创建一个统一项目,该项目将附加到我的网站上。由于它在我的网络上,因此我正在尽我所能或不知道如何对其进行优化。 我不知道是否在方法中创建的所有变量都被销毁/删除,然后程序完成了方法。

例如,我有此方法:

Texture2D TakePhoto()
{
    var currentRT = RenderTexture.active;
    RenderTexture.active = photoCamera.targetTexture;
    photoCamera.Render();
    Texture2D image = new Texture2D(photoCamera.targetTexture.width, photoCamera.targetTexture.height);
    image.ReadPixels(new Rect(0, 0, photoCamera.targetTexture.width, photoCamera.targetTexture.height), 0, 0);
    image.Apply();
    RenderTexture.active = currentRT;
    return image;
}

我应该在方法结束时手动销毁'currentRT'对象吗?还是会自动销毁?我不希望此类信息不必要地浮动。 它对基本变量(整数,字符串,字符等)也起作用吗?

1 个答案:

答案 0 :(得分:2)

Unity不会自动进行垃圾回收Texture2D,如here,所示,这意味着您应在使用结束时对其调用Destroy()

但是,在这种情况下,您可能应该通过引用实例化它,以防止浪费内存,因为由于返回而最终无法销毁。

这是一种固定方法:

Texture2D TakePhoto(ref Texture2D tex)
{
    var currentRT = RenderTexture.active;
    RenderTexture.active = photoCamera.targetTexture;
    photoCamera.Render();
    tex = new Texture2D(photoCamera.targetTexture.width, photoCamera.targetTexture.height);
    tex.ReadPixels(new Rect(0, 0, photoCamera.targetTexture.width, photoCamera.targetTexture.height), 0, 0);
    tex.Apply();
    RenderTexture.active = currentRT;
}