C# WPF 에서 페이지 삭제

WPF에서 페이지를 사용해서 화면 전환을 하고 있는데 페이지가 쌓이면 프로그램 속도가 느려질 것 같아서 페이지를 오픈하면 그 전에 열려 있던 것은 삭제하고 싶은데 어떻게 해결할 수 있을까요?
image

private void tableButton(object sender, MouseButtonEventArgs e)
        {
            Main.Content = new table();
            
        }
3개의 좋아요

먼저 속도가 느려지거나 메모리가 계속 증가 하는지 먼저 확인해 보고 결과를 공유하면 다른 분들께도 도움이 될 것 같은데 어떠세요?

3개의 좋아요

버튼을 누르면 누를수록 메모리는 계속 증가하지만 속도는 느려지지 않았습니다. 일부로 버튼을 연타하지 않는 이상 프로그램을 작동하는 데에는 큰 문제가 없는 것으로 보입니다.

2개의 좋아요

uwp나 winui 3에서는 frame을 이용한 탐색 시 메모리 누수가 쉽게 발생하는 것으로 알고 있는데, wpf도 동일한 증상이 있을지는 모르겠네요. 어쨌든 frame 자체가 backstack이라든지 parameter 등 강한 참조가 발생하기 쉬운 환경이라 유의할 부분이 많을 것 같습니다.

페이지 생성 시 비용이 크다면 캐싱을 하는 방법도 고려해 보심이 좋겠습니다.

4개의 좋아요

화면 전환할 때 동일한 뷰를 계속 생성하는 거면
이미 생성된 뷰를 뷰모델만 갈아껴서 재활용하는건 어떻게 생각하시나요?

5개의 좋아요

@gloomn 윈폼 버전에서 WPF 버전으로 바뀌셨군요! 이 프로젝트도 GitHub로 작업 하고 계신가요?

3개의 좋아요

WPF에서 Frame을 사용하여 화면 전환(Navigate) 처리시
CanGoBack 속성 체크로 이전 페이지가 남아 있는 경우
RemoveBackEntry() 메서드로 히스토리를 제거 할 수 있습니다.

그리고 화면 이동시에 자동으로 해당 뷰는 소멸처리 되기 때문에 딱히 속도가 느려질 일 은 없습니다.
(현제 저희 프로젝트에서도 Frame으로 화면전환 처리를 하고 있습니다.)

@dimohy 님 말씀 처럼 먼저 정말 느려지는지 또 느려진다면 메모리 누수가 있는지 체크가 우선 되어야 할 것 같습니다.

5개의 좋아요

감사합니다:grin::grin:

3개의 좋아요

네! 고딩이라 코딩할 시간이 없어서 전에 좀 만들다가 깃허브에 올려둔 것을 다시 코딩하고 있었습니다:smiley:

3개의 좋아요

답변 감사합니다!! 아직 WPF는 생초보라 뷰, 뷰모델 같은 개념을 아직 못 잡아서 구글링 하면서 코딩하고 있었습니다ㅠㅠ

3개의 좋아요

답변 감사합니다!!

3개의 좋아요