2012-08-09 2 views
0

저는 WPF를 처음 접했고 C++ 배경에서 왔기 때문에 메모리 관리에 대해 너무 많이 걱정하고 있습니다.usercontrol wpf 정적 메모리

어쨌든, 나는 2 열로 눈금이있는 UserControl (NewContact), 상위 열에 3 라디오 단추를 표시하고 선택에 따라 적절한 UserControl을 눈금의 아래쪽 구역으로로드합니다.

private void newMilitaryContactRadioButton_Checked(object sender, RoutedEventArgs e) 
    { 
     UserControl NMC = new NewMilitaryContact(); 
     NewContactWindowGridDisplay.Children.Insert(1, NMC); 
    } 

    private void newMilitaryContactRadioButton_Unchecked(object sender, RoutedEventArgs e) 
    { 
     NewContactWindowGridDisplay.Children.RemoveAt(1); 
    } 

    private void newLegalContactRadioButton_Checked(object sender, RoutedEventArgs e) 
    { 
     UserControl NLC = new NewLegalContact(); 
     NewContactWindowGridDisplay.Children.Insert(1, NLC); 
    } 

    private void newLegalContactRadioButton_Unchecked(object sender, RoutedEventArgs e) 
    { 
     NewContactWindowGridDisplay.Children.RemoveAt(1); 
    } 

    private void newFirmContactRadioButton_Checked(object sender, RoutedEventArgs e) 
    { 
     UserControl NFC = new NewFirmContact(); 
     NewContactWindowGridDisplay.Children.Insert(1, NFC); 
    } 

    private void newFirmContactRadioButton_Unchecked(object sender, RoutedEventArgs e) 
    { 
     NewContactWindowGridDisplay.Children.RemoveAt(1); 
    } 

이제 내 질문에 내가 수 있는지 여부, 그리고 라디오 버튼이 선택하지 않은 경우 어떻게, 내가 생성 된 UserControls을 언로드 할 수 있습니다. MSDN 설명서를 검색 한 결과 부모 개체에서 remove 메서드를 사용하면 usercontrol이 언로드된다는 것을 알았습니다. 만약 그렇다면 내가 여러 가지 "확인되지 않은"방법으로 올바른 방법으로 3 개의 라디오 버튼을 반복해서 클릭하면 NFC/NLC/NMC UserControl 객체를 겹치지 않게하기 위해 사용하는 코드가 있습니다. 그리고 또 다시? 나에게 이것을 설명 할 수 있습니다에 사람에게

많은 감사합니다 :)

+0

시작시 3 개의 컨트롤을 만든 다음 해당 '가시성'을 적절한 라디오 버튼에 바인딩하는 것이 더 쉽지 않을까요? 그렇게하면 그 당시에는 단 한 명만 표시되지만 변경에 관련된 객체는 생성되지 않습니다. :) –

+0

그것은 실제로 많은 감각을 만들 것입니다 ... 나는 너무 열심히 생각했습니다. –

+0

:) 그래도 그건 단지 제안 일 뿐이지 만 그런 식으로하고 문제가 있다면 자유롭게 물어보십시오. –

답변

0

사실 당신은 닷넷 메모리 관리에 대한 자세한 내용 및 작동 방법을 알아야합니다. 귀하의 경우 UserControls 뭐하는거야에 따라 달라집니다? 그들이 시스템 자원을 사용하고 있다면 UserControlunloaded 이벤트에 참조를 파기하는 것이 좋을 것입니다. 그렇지 않으면 GC이 처리 할 것입니다. 곧 당신은 당신의 DataContext, Style의 처리 이벤트를 설정하는 등처럼 UserControl을 더 할 필요가 알 수 있기 때문에, 은 또한 당신이하려고하는 방법은 매우 좋지 않다 Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework

:

이 기사를 읽기 ... 그리고 이것은 코드로하기가 어렵습니다.