先看代码吧 public void Auto()
        {
            if (checkBox6.Checked == false)
                return;            auPros = Process.GetProcesses();
            Myexist = false;
            foreach (Process tempPoc in auPros)
            {
                if (tempPoc.ProcessName == "vmware")
                {
                    Myexist = true;
                    break;
                }
            }            if (checkBox6.Checked == false)
                return;            if (Myexist && !aut)
            {
                aut = true;
                AutoStart();
            }            if (checkBox6.Checked == false)
                return;            if (!Myexist && aut)
            {
                aut = false;
                AutoStop();
            }            if (checkBox6.Checked == false)
                return;            Thread.Sleep(1000);            Auto();
        }
只要这个线程一启动,我程序的内存就不停的涨 从27mb一直到500mb左右才被回收一次(突然间到200mb然后继续涨)
    现在我认为是这个递归调用占用了内存   而且不释放。。   希望大家帮帮我  我要怎么解决
补充下  我认为只要一  return   线程就结束了(这是由用户决定的)
                               递归事实上是可以随时终止的  所以我觉得在这个线程中没有必要纠缠死循环的问题(事实上vs2008也没有报错  提示这段代码存在死循环的问题)

解决方案 »

  1.   

    结果应该是栈越来越高吧
    试试删掉过程中的Auto调用
    直接
    for(;;)
    {
    Auto();
    }
    看看是不是效果会更好点?
      

  2.   

    for(;checkBox6.Checked;)
    {
    Auto();
    }
      

  3.   

    所有的递归算法,都可以通过在堆中建立一个堆栈来解决.即把函数的参数放到一个堆中的堆栈中,
    while(stack.Count>0)
    {
    参数= stack.Pop();
    方法(参数);//方法中需要调用自身时,只需要把参数Push到这个stack就可以直接退出了.
    }对于次数太多的递归,可以试试上面的方法
      

  4.   

    试试这样
    如果你认为30M足够使用,可以先设置内存最大使用的值,避免内存过大。你可以不修改你的函数,调用的时候进行设置:
    IntPtr old = Process.GetCurrentProcess().MaxWorkingSet;
    Process.GetCurrentProcess().MaxWorkingSet = (IntPtr)(30 * 1024 * 1024);
    Auto();
    Process.GetCurrentProcess().MaxWorkingSet = old;或是在你的Auto的第一行加上:
    GC.Collect();
      

  5.   

       虽然  对什么   堆栈不是很清楚   
        但是使用while语句   真的是个不错的主意
          我去试试   (感觉用while应该可以解决问题)  谢谢大家
                  十分感谢以上各位的回帖!
      

  6.   

      问题解决了    就是使用while
          结贴   给分