编程中,关于死循环释放资源的问题.我用的c#

那个问下啊,我在程序的函数里写了很多死循环,我在死循环里面直接用的return语句,结束函数,没有break先跳出循环再结束函数,我想知道,用return跳出的循环,在内... 那个问下啊,我在程序的函数里写了很多死循环,我在死循环里面直接用的return语句,结束函数,没有break先跳出循环再结束函数,我想知道,用return跳出的循环,在内存里会释放掉死循环的资源吗? 展开
 我来答
百度网友16ad9e1
2013-06-28 · TA获得超过774个赞
知道小有建树答主
回答量:477
采纳率:0%
帮助的人:508万
展开全部
会的 这个不用担心
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试试

tianweimol
2013-06-28 · TA获得超过360个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:87.4万
展开全部
会的,每一个方法或对象在自己的生命周期结束的时候,GC都会对其进行回收
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式