在C#中的服务(System.ServiceProcess.ServiceBase)强制进行垃圾回收。在OnStart()函数中起动了一个线程,线程调用了包含垃圾回收的函数。GC.WaitForPendingFinalizers()函数被阻塞。代码在一般的控制台程序可以正常运行。就是把线程函数中的代码放到Main函数中可以正常运行,此时GC.WaitForPendingFinalizers()函数不会被阻塞。

解决方案 »

  1.   

    WaitForPendingFinalizes()会挂起调用线程,直到处理终止化可达队列的线程清空了该队列,并完成每个对象的Finalize方法调用为止。
      

  2.   

    使用Dispose的时候应该注意,系统的GC自动处理..可以参考微软的Dispose方法..给强制回收函数加入一个验证bool字段判断,当前GC是否被启动..
      

  3.   

    我只见过在main中使用
    WaitForPendingFinalizes()