2009-11-23 2 views
4

C# 클래스의 인스턴스를 반복 할 수 있습니까? 이러한 인스턴스는 컬렉션에서 추적되거나 관리되지 않습니다.C# 클래스의 인스턴스를 반복하는 방법은 무엇입니까?

+0

마크 업이 프레임 워크에서이 작업을 수행 할 수 없다는 것이 맞습니다. 누군가가이 작업을 수행하려는 횟수가 상당히 적어야한다고 생각합니다. 달성하고자하는 특정 항목이 있습니까? –

+0

특별한 것은 없습니다. 열리는 양식은 두 가지 이름 중 하나를 사용할 수 있습니다 (양식의 특정 특성을 기반으로 함). 어쩌면 그건 불필요한 것이며 단일 양식 이름을 고수 할 것입니다. – Asaf

+0

양식을 한 번만 열어 보려고하는 경우 - 아마도 뮤텍스를 사용할 수 있습니다. Form의 제목을 원하는대로 지정할 수 있으며, 뮤텍스가 이미 생성되었는지 여부를 확인하기 만하면됩니다. – quip

답변

8

정규 프레임 워크 안에 없습니다. 을 수동으로 추적하려면이 필요합니다.

그러나 windbg/sos에서이 작업을 수행 할 수 있습니다. 주로 디버깅 용도로 사용됩니다 (루틴 코드가 아님).

+0

또는 프로파일 링 API를 사용할 수 있습니다 - http://msdn.microsoft.com/en-us/magazine/cc188781.aspx –

1

어딘가에 대한 참조가 있거나 최소한 어디에서 봐야하는지 알 필요가 있으므로 식별 할 때 반복 할 컬렉션에 넣을 수 있습니다.

참조가 어디에 있는지 잘 모르는 경우 일종의 추적 메커니즘을 도입해야합니다. 아마도 형식에 대한 정적 컬렉션입니까? 그것은 신중하게 구현해야 할 것입니다.

1

직접적으로.

개체를 개념적으로 잘 알려진 장소 (예 : 정적 컬렉션)에 배치 한 다음이를 반복하여 사용할 수는 있지만 그 다음에 인스턴스를 지워야합니다. 어떤 시점에서 수집하거나 그렇지 않으면 쓰레기 수거되지 않을거야.

+2

아마도 WeakReference를 컬렉션에 사용하십시오. 그러나 어느 쪽이든, 나는 "이 인스턴스들은 컬렉션에서 추적되거나 관리되지 않습니다."라고 반대합니다. 질문에. –

0

마크 (Marc)가 말한 것처럼 코드에서 수행하려는 경우 해당 컬렉션을 유지해야합니다. 디버깅하는 경우 다음 블로그 게시물을 참조하십시오. http://blogs.msdn.com/tess/archive/2006/01/23/516139.aspx

특정 유형의 모든 객체 인스턴스를 메모리에 저장해야하는 경우 System.WeakRef의 컬렉션을 사용하는 것이 좋습니다. 약한 참조입니다. 참조하는 객체를 유지하지 않는 참조입니다. 이것은 열거하고자하는 객체 인스턴스에 weak-refs 콜렉션을 유지하게 해준다. 자세한 정보는 Weakrefs를보십시오.

0

댓글 스레드 on this post에는이 질문과 관련된 흥미로운 토론과 해결책이 있습니다.

관련 문제