Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 临时对象的内存何时释放_C#_.net - Fatal编程技术网

C# 临时对象的内存何时释放

C# 临时对象的内存何时释放,c#,.net,C#,.net,如果我有以下代码 Public int SomeFunct() { int temp; Int32.Parse(txtbox.Text, out temp); return temp; } 我正在使用一个临时int。那么在函数执行结束后,int(或任何使用的临时对象)的内存何时释放? 或者,是否有任何代码需要显式调用?在这种情况下,temp变量很可能是在堆栈上或寄存器中分配的 我之所以说“最有可能”,是因为据我所知,这一级别代码的确切工作方式是特定于实现的 在堆栈上,当

如果我有以下代码

Public int SomeFunct()
{
    int temp;
    Int32.Parse(txtbox.Text, out temp);
    return temp;
}
我正在使用一个临时int。那么在函数执行结束后,int(或任何使用的临时对象)的内存何时释放?
或者,是否有任何代码需要显式调用?

在这种情况下,
temp
变量很可能是在堆栈上或寄存器中分配的

我之所以说“最有可能”,是因为据我所知,这一级别代码的确切工作方式是特定于实现的

在堆栈上,当方法返回时,它将被释放。如果它被放置在寄存器中,那么该寄存器将在某个点被重用,并且当该方法返回时将停止任何特定含义

在本例中,我认为总结一下,当方法返回时,它将被“解除分配”

还要注意,虽然.NET中的所有类型都继承自
System.Object
,但短语“Object”通常由引用类型使用
int
是一种值类型,未在堆上分配

如果您的意思是“临时对象发生了什么”,那么垃圾收集器将在稍后的不确定时间点收集这些对象

例如,这段代码:

public void Log(int value)
{
    Debug.WriteLine(value);
}
这是我们正在使用的。在这种情况下,
int
值将为,这意味着将在堆上分配一个对象来保存我们的
int


此临时对象将由调试.WriteLine使用,然后不再被视为“正在使用”。在将来某个不确定的时间点,垃圾收集器将收集它。

正如James所说,垃圾收集将在未知的将来时间释放内存。您可以强制garbace集合与
GC.Collect()
一起运行,但这应该发生在您的函数之外,因为在函数内部,temp变量仍在作用域内。GarbageCollector将处理此问题。通常你不应该调用GC.Collect,除非是一些非常奇怪和罕见的原因。所以干脆不关心它,让垃圾收集器来做它的工作。工作