WeakReferences에 관한 질문이 있습니다.WeakReferences에 대한 질문
저는 지금 생성 된 텍스처 개체에 대한 참조를 유지하는 "리소스 관리자"를 작성하는 중입니다. 첫 번째는 allready 추측 수 있으므로 자원 ID와 두 번째 PARAM은 자원 자체에 WeakReference를하다,이다
Dictionary<uint, WeakReference>
: 나는 같은 사전이있다.
지금 내 자원에는 소유자 (즉, 자원 관리자)로부터 자신을 해방시킬 수있는 방법이 있습니다. 그들은 Resource Manger에서이 참조를 전달하면서 메소드를 호출 할 때 그렇게합니다.
WeakReference result;
if (m_Resources.TryGetValue(ResourceId, out result))
{
if (result.IsAlive)
return;
(result.Target as Resource).free(); // free for good
m_Resources.Remove(ResourceId);
}
파트 후 나는 데 문제가 있음 :
if (result.IsAlive)
는 결코 그가의 그렇다면 즐겨 찾기에 계속 자원 인 경우 ResMgr이 같은 무언가를, 검색을 수행 여전히 리소스에 대한 남은 참조가 있기 때문에 도달했습니다.
문제는 난 단지 문제가되는 자원 중 하나 참조해야합니까, 그리고 그것은 같은 자신을 출시 :
resource.free(); // calls internally its owner (i.e. ResMgr)
resource = null;
내가은 "자원"변수가 될 것입니다 참조를 통해 왼쪽,하지만 난 설정할 수 없습니다 같아요 내가 먼저 무료로 전화해야하기 때문에 null로 설정하십시오. 꽤 딜레마 ...
글쎄, 내가 소유하고있는 리소스에 대한 참조를 유지하고 뭔가를 망쳐 놓지 않은 레퍼런스가없는 경우에만 리소스 관리자에게 알려주고 싶다.
내가 어떻게 이런 방식으로 깨끗하게 해결할 수 있을지 궁금하십니까?
추신 : 실제로 참조 횟수를 얻는 방법이 있습니까?
미리 감사드립니다.
제조 임프
감사합니다. 꽤 유용합니다. 나는 좋은 자체 정리 데이터 구조에 대해 몰랐다. – impmja
흠, 나는 그것이 단지 .NET 4.0 내에서만 가능하다는 것을 알았다. .. 나쁘다. 그러나 어쨌든 고마워! – impmja