编程中,关于死循环释放资源的问题.我用的c#
那个问下啊,我在程序的函数里写了很多死循环,我在死循环里面直接用的return语句,结束函数,没有break先跳出循环再结束函数,我想知道,用return跳出的循环,在内...
那个问下啊,我在程序的函数里写了很多死循环,我在死循环里面直接用的return语句,结束函数,没有break先跳出循环再结束函数,我想知道,用return跳出的循环,在内存里会释放掉死循环的资源吗?
展开
2个回答
展开全部
会的 这个不用担心
return跟 break的区别是
return是直接退出这个函数了 当然也就退出里面的循环了 循环后面的代码不会被执行
while(true)
{
......
return;
}
这里的代码不会被执行了
break只是退出循环 循环后面如果有代码会继续执行
while(true)
{
......
break;
}
这里的代码会被执行
return跟 break的区别是
return是直接退出这个函数了 当然也就退出里面的循环了 循环后面的代码不会被执行
while(true)
{
......
return;
}
这里的代码不会被执行了
break只是退出循环 循环后面如果有代码会继续执行
while(true)
{
......
break;
}
这里的代码会被执行
更多追问追答
追问
不是我想要的,我知道return既可以结束函数,也可以跳出循环,但只是表面现象而已,内存里,我们并不知道死循环所占用的资源是否还在占用着,反正很多人多说用死循环的话,没用break而用return结束的该循环,会出现很多意想不到的问题.
追答
你想要的是什么?
我不知道你所说的很多人是指谁
但是我可以明确的告诉你 return后 循环会立即停止
该循环已经不再占用任何资源 但是循环中的资源是否会被释放取决于是否有其他地方保留着对该资源的引用 如果其它地方没有引用 那么会被GC回收
举个例子,字数限制原因 代码不能写的很完全
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
int counter = 0;
List<DataTable> tbs = new List<DataTable>();
while (true)
{
tbs.Add(getTB(10000));
counter++;
if (counter >= 100)
return;
}
}
private void button2_Click(object sender, EventArgs e)
{
GC.Collect();
}
}
这是一个windows form应用程序 button1 用来用一个死循环来填充一些列的datatable, 没有意义只是用来吃内存
button2 手动调用gc来回收
填充table之前
之后
调用gc之后
你可能会说gc后的内存比刚刚启动的时候增长了不少, 这是gc机制的问题
你可以进行多次 填充 - 释放 你会发现 gc后的内存是趋于稳定的
然后你再把return 改成break试试
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询