本帖最后由 thunderwolf 于 2010-11-25 16:55:06 编辑

解决方案 »

  1.   

    会的,当Entry生命周期结束后,里面的静态方法消耗的内存也会被释放掉。
    建议楼主仔细阅读下NET下的GC机制。
    在NET的GC里面,CLR垃圾回收共分3代,每个步骤具体做生命可以GOOGLE下
      

  2.   

    应该不会释放内存吧....Entry这个是类不是实体
      

  3.   

    静态method里的变量消耗的内存会在method执行完毕后释放,因为这些内存在stack里
      

  4.   

    不用担心,在.net中,任何以托管方式申请的内存占用最后都会被释放。静态变量也会在程序退出之后被释放。静态方法里面的变量申请只要是托管方式申请的,一样会被.net自动管理,最后释放。这是.net的优势之一。还有你的代码明显有语法问题。你的Entry.ReceiveData明明没有返回值,为什么上面调用的时候还strreturn = Entry.ReceiveData(str);
      

  5.   


    静态方法里面以托管方式申请的内存,在静态方法执行完毕之后,如果遇到垃圾回收,也是在收回之列。当然什么时候回收要看.net觉得是否有必要。静态成员变量不会释放,只有程序退出之后才会。这个也不用担心,静态成员变量一般都是引用模式,你可以给他不同的内存块引用,他只会保留他引用的那块,以前引用的,垃圾回收也会收集走的。所以,根本不会出现内存越耗越多的问题。.net收回机制就是只要发现某个内存块引用为0,就会回收。比如你这段代码:
    while (str != null)
                    {
                        string[] kk = str.Split(',');                    if (kk[0].Equals("entrybalance"))
                        {
                            strreturn = Entry.ReceiveData(str);
                            sw.Write(strreturn);
                            sw.Flush();
                        }
                      }你每循环一次,KK实际上就代表不同的内存块,所以你永远只保留了一个KK,以前KK引用的内存块其实都会被垃圾回收自动收集的。不用担心内存耗尽。
    同样你ReceiveData方法中也不停的申请了KK,看你的意思很可能是要返回这个KK的,其实返回也只是引用,每次引用都发生了改变,以前的内存块自然会被回收,也不用担心。
    .net就这点好,内存方面不用你考虑,只要是托管方式申请的内存消耗,垃圾收回都会自动的处理,根本不用程序员担心这个问题。
    这本来就是.net,Java的优点之一。当然长期用这种语言的人,搞不懂内存是如何运作的,也不是什么好事情。
      

  6.   

    其实,.net虽然能够很智能的回收内存,但做为我们编程人员来说,如果不考虑内存消耗问题,这将从一定程度上造成我们的程序运行性能降低,系统资源消耗严重,特别是对一些大中型项目来说,如果我们对内存进行很好的释放,比如用C#中Using 语句块或是dispose()方法来手动释放资源,这些都要比等到垃圾回收站来释放内存好的多!