我的web service是用C#写的,并且其中的通讯部分是不能停止的,每十秒钟就要与远程主机通讯一次,对于以前分配的内存如何回收,如:byte[] buff=new byte[4096];
......听说C#是自动回收内存的,但我的进程占用内存为什么每天都在增加,有一天占用达到90M,而且进程也死了,不响应外界访问了。
请那位大虾帮助!!切切

解决方案 »

  1.   

    老大是这样的:
    外部调用一次,就会byte[] buff=new byte[4096],也就是每调用一次就分配4096字节,问题是本次执行完毕怎么回收这4096个字节呢?
      

  2.   

    byte[] buff=new byte[4096]; 这种内存,在超出了生存期之后,CLR会自动帮你回收,除非你使用的是unsafe的内存另外90M其实对于.NET程序来说是一个正常的数值,除非是在一直不停的涨,
    你所说的没有响应的情况,建议还是看看自己是否使用了多线程同步这类容易死锁的东西,
    或者类似的内容。
      

  3.   

    byte[] buff=new byte[4096]; 这种内存,在超出了生存期之后,CLR会自动帮你回收,除非你使用的是unsafe的内存另外90M其实对于.NET程序来说是一个正常的数值,除非是在一直不停的涨,
    你所说的没有响应的情况,建议还是看看自己是否使用了多线程同步这类容易死锁的东西,
    或者类似的内容。
    ----------------老大说得有理,我用了互斥调用,是这样写的:
    public static Mutex mt=new Mutex(false)
    ......mt.WaitOne();
    Thread.sleep(10);
    ......    //想互斥执行的程序段
    ......
    mt.ReleaseMutex( );那像这样,如何解决死锁呢??
      

  4.   

    buff=null
    这样buff就变成垃圾了。才能被回收器回收。