在现有C#代码中找到Dispose。我应该把它扔掉吗?
我在一个使用Kinect v2的Unity3D项目中发现了以下代码,我已经接管了该项目。我有妄想症,所以我想在删除它之前先检查一下。 但肯定没有理由说这两行话在现有C#代码中找到Dispose。我应该把它扔掉吗?,c#,unity3d,kinect,dispose,C#,Unity3d,Kinect,Dispose,我在一个使用Kinect v2的Unity3D项目中发现了以下代码,我已经接管了该项目。我有妄想症,所以我想在删除它之前先检查一下。 但肯定没有理由说这两行话 colorFrame.Dispose(); colorFrame = null; 这是C。它具有自动垃圾收集功能,所以我的理解是,当colorFrame在if(GetRGB)语句之外方便时,它将被处理 if (GetRGB) { ColorFrame colorFrame = frame.ColorFrameReference.
colorFrame.Dispose();
colorFrame = null;
这是C。它具有自动垃圾收集功能,所以我的理解是,当colorFrame在if(GetRGB)语句之外方便时,它将被处理
if (GetRGB)
{
ColorFrame colorFrame = frame.ColorFrameReference.AcquireFrame ();
if (colorFrame != null)
{
colorFrame.CopyConvertedFrameDataToArray (_ColorData, ColorImageFormat.Rgba);
_ColorTexture.LoadRawTextureData (_ColorData);
_ColorTexture.Apply ();
colorFrame.Dispose ();
colorFrame = null;
}
}
它有自动垃圾收集功能,所以我的理解是
色框将在其方便的外部进行处理
if(GetRGB)语句
if (GetRGB)
{
ColorFrame colorFrame = frame.ColorFrameReference.AcquireFrame ();
if (colorFrame != null)
{
colorFrame.CopyConvertedFrameDataToArray (_ColorData, ColorImageFormat.Rgba);
_ColorTexture.LoadRawTextureData (_ColorData);
_ColorTexture.Apply ();
colorFrame.Dispose ();
colorFrame = null;
}
}
一旦GC启动(在不确定的时间)并看到colorFrame
对象没有根,对象就会被清理。在对象上调用Dispose
通常会释放由同一对象分配的非托管资源,以及调用GC.superssFinalize
,这会使任何具有终结器的对象从终结队列中注销,从而使GC能够“更快”清理它
我建议您继续拨打Dispose
。我将删除colorFrame=null
调用,这是无用的
更好的方法是,使用语句将colorFrame
包装在中:
if (GetRGB)
{
using (ColorFrame colorFrame = frame.ColorFrameReference.AcquireFrame())
{
if (colorFrame != null)
{
colorFrame.CopyConvertedFrameDataToArray(_ColorData, ColorImageFormat.Rgba);
_ColorTexture.LoadRawTextureData(_ColorData);
_ColorTexture.Apply();
}
}
}
它有自动垃圾收集功能,所以我的理解是
色框将在其方便的外部进行处理
if(GetRGB)语句
if (GetRGB)
{
ColorFrame colorFrame = frame.ColorFrameReference.AcquireFrame ();
if (colorFrame != null)
{
colorFrame.CopyConvertedFrameDataToArray (_ColorData, ColorImageFormat.Rgba);
_ColorTexture.LoadRawTextureData (_ColorData);
_ColorTexture.Apply ();
colorFrame.Dispose ();
colorFrame = null;
}
}
一旦GC启动(在不确定的时间)并看到colorFrame
对象没有根,对象就会被清理。在对象上调用Dispose
通常会释放由同一对象分配的非托管资源,以及调用GC.superssFinalize
,这会使任何具有终结器的对象从终结队列中注销,从而使GC能够“更快”清理它
我建议您继续拨打Dispose
。我将删除colorFrame=null
调用,这是无用的
更好的方法是,使用
语句将colorFrame
包装在中:
if (GetRGB)
{
using (ColorFrame colorFrame = frame.ColorFrameReference.AcquireFrame())
{
if (colorFrame != null)
{
colorFrame.CopyConvertedFrameDataToArray(_ColorData, ColorImageFormat.Rgba);
_ColorTexture.LoadRawTextureData(_ColorData);
_ColorTexture.Apply();
}
}
}
它将在不确定的未来时间进行垃圾收集。如果类编写正确,它将包括对Dispose
的内部调用
但是,您应该始终调用Dispose
(或者更好地使用using
块)在IDisposable
对象上,它们可以释放它们当前持有的任何非托管资源,而无需等待框架执行垃圾收集。它将在不确定的未来时间进行垃圾收集。如果类编写正确,它将包括对Dispose
的内部调用
但是,您应该始终在IDisposable
对象上调用Dispose
(或者更好地使用using
块),这样它们就可以释放它们当前持有的任何非托管资源,而无需等待框架执行垃圾收集。垃圾收集是CLR的一部分。IDisposable是一个任意接口,用于在类结束生命时清理类使用的资源。不要移除和处置!!!框架对Dipose()一无所知,也不会调用它。垃圾收集是CLR的一部分。IDisposable是一个任意接口,用于在类结束生命时清理类使用的资源。不要移除和处置!!!框架对Dipose()一无所知,也不会调用它。的可能重复