문제

습니다.NET,후 이 코드는 무엇 메커니즘을 중지 Thread 체에서 쓰레기를 수집합니까?

new Thread(Foo).Start();
GC.Collect();

네,그것은 안전하다고 가정 대한 참조가 있는 쓰레드,나만 방황을 정확히 무엇.어떤 이유로 반사되지 않 표시 System.Threading, 할 수 없습니다 그것을 자신에게(알 MS 소스 코드를 공개한다.NET framework,나는 그냥 그것이 없이 편리).

도움이 되었습니까?

해결책

런타임을 유지에 대한 참조를 스레드로 실행됩니다.GC 늘 그것을 모은 한 사람이 여전히 유지된 참조.

다른 팁

지에 따라 다릅니다 쓰레드를 실행 또는 아닙니다.는 경우에 당신은 방금 만든 실체고 시작하지 않았다,그것은 평범한 개체를 관리,즉에 대한 자격 GC.한 빨리 시작할 쓰레드,또는 당신이 얻을 때 실체에 대한 이미 실행 스레드(GetCurrentThread)그것은 조금 다릅니다.The"노출체",관리 실제에 개최한 강한 참조 CLR,그래서 당신은 항상 동일한 인스턴스입니다.때 스레드가 종료되면,이 강력한 참조가 발표,그리고 관리되는 개체를 수집한 한 빨리 당신이 있지 않는 다른 대한 참조(지금 죽)스레드가 있습니다.

그것의 하드 와이어의 기능을 쓰레기 수집기.실행 스레드는 수집되지 않습니다.

만,안전하다고 가정하는 경우에는 스레드가 실행 중인 어디선가 무언가가 그것을 참조하도록 하지 않을 중지 충분히 가비지 컬렉션?

중요한 점을 참고 하지만-만약 당신의 스레드 표시 IsBackground=True,그것을 방해하지 않도록 전체 프로세스에서는 종료

새로운 스레드에 할당하는 지역니까?

class YourClass
{
  Thread thread;

  void Start()
  {
    thread = new Thread(Foo);
    thread.Start();
    GC.Collect();
  }
}

가비지 컬렉션이 수집하는 모든이지 참조,그래서 당신의 코드가 없장/변수를 참조하여 실을 것이다,그래서 수집할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top