WPF에서 페이지를 사용해서 화면 전환을 하고 있는데 페이지가 쌓이면 프로그램 속도가 느려질 것 같아서 페이지를 오픈하면 그 전에 열려 있던 것은 삭제하고 싶은데 어떻게 해결할 수 있을까요?
private void tableButton(object sender, MouseButtonEventArgs e)
{
Main.Content = new table();
}
WPF에서 페이지를 사용해서 화면 전환을 하고 있는데 페이지가 쌓이면 프로그램 속도가 느려질 것 같아서 페이지를 오픈하면 그 전에 열려 있던 것은 삭제하고 싶은데 어떻게 해결할 수 있을까요?
private void tableButton(object sender, MouseButtonEventArgs e)
{
Main.Content = new table();
}
먼저 속도가 느려지거나 메모리가 계속 증가 하는지 먼저 확인해 보고 결과를 공유하면 다른 분들께도 도움이 될 것 같은데 어떠세요?
버튼을 누르면 누를수록 메모리는 계속 증가하지만 속도는 느려지지 않았습니다. 일부로 버튼을 연타하지 않는 이상 프로그램을 작동하는 데에는 큰 문제가 없는 것으로 보입니다.
uwp나 winui 3에서는 frame을 이용한 탐색 시 메모리 누수가 쉽게 발생하는 것으로 알고 있는데, wpf도 동일한 증상이 있을지는 모르겠네요. 어쨌든 frame 자체가 backstack이라든지 parameter 등 강한 참조가 발생하기 쉬운 환경이라 유의할 부분이 많을 것 같습니다.
페이지 생성 시 비용이 크다면 캐싱을 하는 방법도 고려해 보심이 좋겠습니다.
화면 전환할 때 동일한 뷰를 계속 생성하는 거면
이미 생성된 뷰를 뷰모델만 갈아껴서 재활용하는건 어떻게 생각하시나요?
WPF에서 Frame을 사용하여 화면 전환(Navigate) 처리시
CanGoBack 속성 체크로 이전 페이지가 남아 있는 경우
RemoveBackEntry() 메서드로 히스토리를 제거 할 수 있습니다.
그리고 화면 이동시에 자동으로 해당 뷰는 소멸처리 되기 때문에 딱히 속도가 느려질 일 은 없습니다.
(현제 저희 프로젝트에서도 Frame으로 화면전환 처리를 하고 있습니다.)
@dimohy 님 말씀 처럼 먼저 정말 느려지는지 또 느려진다면 메모리 누수가 있는지 체크가 우선 되어야 할 것 같습니다.
감사합니다
네! 고딩이라 코딩할 시간이 없어서 전에 좀 만들다가 깃허브에 올려둔 것을 다시 코딩하고 있었습니다
답변 감사합니다!! 아직 WPF는 생초보라 뷰, 뷰모델 같은 개념을 아직 못 잡아서 구글링 하면서 코딩하고 있었습니다ㅠㅠ
답변 감사합니다!!