수명

2012-06-28 3 views
0

나는이 내 서비스에 다음 코드 :수명

protected override void OnStart(string[] args) 
{ 
    var cleaner = new Cleaner(); 
    Action action = cleaner.Run; 
    action.BeginInvoke(null, null); 
} 

나는 그것이 GC에 의해 수집 될 수 사용하는 객체로 인스턴스 변수에 대리자를 이동해야하는 경우 내가 걱정 때문에 로컬로만 생성됩니다.

+0

[GC.Collect()] (http://msdn.microsoft.com/en-us/library/xe0c2357.aspx)를 호출하여 어떤 일이 발생했는지 확인하려고 했습니까? –

답변

0

여전히 "사용중"인 개체가 수집되면 어떻게됩니까? 그 질문에 대한 제정신의 대답은 없습니다. 이러한 이유로 CLR은 여전히 ​​참조중인 개체가 가비지 수집되지 않도록합니다. 코드를 작성하는 방법에 관계없이 안전합니다.

아직 참조 된 개체를 수집 할 수있는 권한조차 없습니다. 네가 원한다고해도.

+0

'action' 자체를 수집 할 수 없습니까? – Grozz

+0

아무도 그것을 사용하지 않았다면 (예를 들어, BeginInvoke를 호출 한 후, 어쩌면 그 동안). 이것이 문제의 원인이 될 것으로 생각하십니까? 할 수 없거나해서는 안됩니다. – usr

+0

그래서'action'이 수집되면'cleaner'가 수집됩니다. 따라서 여전히'cleaner.Run' 함수를 실행중인 스레드는 유효하지 않은 데이터로 남게됩니다. – Grozz