c# - 所有在方法上创建的变量都被销毁然后程序完成了吗?
问题描述
我正在创建一个统一项目,我将把它附加到我的网站上。因为它在我的网络上,所以我正在尝试尽可能多地优化我的代码,或者知道如何询问它。我不知道方法中创建的所有变量是否都被销毁/删除然后程序完成该方法。
例如我有这个方法:
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”对象吗?还是会自动销毁?我不希望这种信息不必要地四处飘荡。它也适用于基本变量:整数、字符串、字符等吗?
解决方案
Unity 不会自动进行垃圾收集Texture2D
,如此处所示,这意味着您应该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;
}
推荐阅读
- java - 在角度上使用 ResponseEntity 对象
- perl - Windows 命令提示符创建但不将输出重定向到文件
- c# - c# Razor Pages,EF Core,如何通过代码生成子记录并将其添加到尚未使用添加的父记录
- angular - 角度自定义表无法从 API 呈现数据
- microsoft-graph-api - Office 365 日历 ID 更改
- reactjs - 为什么我的 React 网站大小调整不正确?
- c# - 获取 Http 请求,并在 lit 的每个结果之间暂停
- python - 从检查点加载 tensorflow 模型不会更新参数
- python - Python:为什么将不同类型的参数传递给类型定义的函数不会引发任何错误?类型注释只是为了可读性吗?
- c# - Blazor 无法从其他文件夹中找到引用的组件