1

저는 XF 1.0부터 Xamarin을 개발해 왔습니다. 메모리 누출은 XF 1.0에서 XF 2.4까지 큰 문제였습니다. 나는 항상 각 ContentPage 및 ViewModel 클래스에서 Dispose Pattern을 구현하여 이벤트 핸들러, 메시지 구독자, 객체 참조가 모두 제거되고 각 클래스의 OnDisappearing() 또는 Dispose() 함수에서 null로 설정되도록합니다.Xamarin.Forms 2.4.0 이상의 너겟에서 Xamarin.iOS에 대한 참조 계산 방법이 더 이상 사용되지 않습니까?

다음은 매우 흥미로운 것입니다. 프로젝트를 2.3.3.180에서 Xamarin.Forms 2.4.0.280으로 업그레이드 한 후. Xamarin.iOS에서 메모리 누수를 생성하는 데 사용 된 이러한 유형의 코드가 더 이상 발생하지 않습니다. 코드 예 :

public partial class ContactUsPage : ContentPage 
{ 
    public ContactUsPage() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnAppearing() 
    { 
     //Lets say I have button named "btn" declared in Xaml page 
     btn.Clicked += OnButtonClicked 

     MessagingCenter.Subscribe<CoreMessenger, string>(this, "AMessageType", (sender, arg) => 
     { 
      //some code 
     }); 
    } 

    protected override void OnDisappearing() 
    { 
     //btn.Clicked -= OnButtonClicked 
     //MessagingCenter.Unsubscribe<CoreMessenger, string>(this, "AMessageType"); 
    } 
} 

전에 우리가 밀어 모달 여러 시간으로이 페이지를 팝업 경우 Xamarin.Forms 2.4에, 우리는이 페이지의 여러 인스턴스가 메모리에 유지하고 쓰레기통에 의한 수집되지 않습니다 볼 수 있습니다 OnDisappearing() 함수에서 코드의 주석 처리를 제거하지 않으면 이벤트 처리기 및 구독자가 제거되지 않고 ContactUsPage 인스턴스를 가리키는 개체 참조를 만들었습니다.

위의 코드는 Xamarin.Forms 2.4.0.280에서 컴파일 할 때 더 이상 Xamarin iOS에서 메모리 누수가 발생하지 않지만 참조 카운팅 가비지 수집이 작동하는 방법에 대한 지식이 있으므로 분명히 메모리가 누출됩니다. Xamarin이 Xamarin.iOS의 GC 방법을 변경 했습니까? 그래서 Xamarin과 같은 마크 앤 스위프를하고 있습니다 .Android는 지금?

누군가 변경된 이유와 그 이유를 알려 줄 수 있습니까? 감사합니다.

+0

[Xamarin.forms 2.4 릴리스 노트] (https://developer.xamarin.com/releases/xamarin-forms/xamarin-forms-2.4/2.4.0-stable/)에서 해당 항목을 찾지 못했습니다. . –

답변

1

MessagingCenter의 커밋 내역을 살펴보십시오.

https://github.com/xamarin/Xamarin.Forms/commits/master/Xamarin.Forms.Core/MessagingCenter.cs

난 당신이 적어도 MessagingCenter를 사용하여 위의 예제의 측면에서 1 월 3 일 2017 년에 커밋의 효과를보고있다 생각합니다.

+0

2017 년 1 월 3 일 커밋이 약한 참조를 사용하게 만든 이후 MessaginCenter 가입자가 GC 수집 된 이유를 설명합니다. 그러나 이벤트 핸들러를 제거하지 않고 "btn.Clicked + = OnButtonClicked"와 같은 버튼 이벤트 핸들러는 어떻습니까? Xamarin.Forms 커밋이이 변경으로 연결되는 것을 알고 있습니까? 감사. –

관련 문제