효율적인 애플 리케이션을 만드는 것이 좋으며 종종 애플리케이션의 응답 성을 향상시키기 위해 동시성과 멀티 스레딩을 고려하지만 요즘에는 WPF의 단일 스레드 방식으로 내 시도가 항상 차단 된 것처럼 보입니다. 아무리 효율적이고 평행 한 코드라도 WPF는 지속적으로 내 UI를 멈추게하고 내 앱을 놀라 울 정도로 반응이없는 것처럼 보입니다. 때때로 렌더링하는 창을 기다리는 동안 마우스 커서가 움직이지 않는 초를 걸릴 수 있습니다. 속도를 내려면 내가 할 수있는 일이 없어 보이는 것처럼 좌절감을 느낍니다.WPF 랜더링 병목 현상 해결
내 질문에, 은입니다. 내 WPF 앱에서 응답 성을 향상시킬 수있는 방법이 있습니까? 내 창은 스타일과 구성면에서 다소 복잡한 경향이 있으며 이미 가상화 StackPanels를 사용하고 있습니다.
문제점을 설명하려면 다음과 같이하십시오. 검색 상자 역할을하는 텍스트 상자가 있으며 각 결과가 UserControl에 캡슐화되고 ItemsControl에 표시된대로 사용자가 입력 할 때 즉시 결과를 표시하려고합니다. 배경 스레드를 사용하여 검색을 수행하고 있습니다. 문제는 WPF가 UI를 완전히 멈추게하는 검색 결과를 렌더링하여 WPF가 버려지는 동안 한 번에 두 번째로 입력이 고정되므로 전체 "결과를 입력 할 때"를 매우 실용적이지 않게 만드는 것입니다.
WPF가 렌더링되는 동안 UI 스레드가 멈추는 것을 피할 수있는 방법이 있습니까?
이것은 제대로 들리지 않습니다. 앱이 모든 작업을 수행하고 모든 검색 결과를 생성 할 수 있지만 결국에는 빈 목록을 표시합니까? 그렇게하면 실제로 렌더링과 관련이 있는지 알 수 있습니다. 또한 크로스 스레드 통신에는 많은 오버 헤드가 있습니다. 단 한 번의 호출로 UI 스레드로 전체 목록을 다시 전달합니까? (배경 스레드의 컬렉션에 항목을 추가하면 개별 알림을 보내면 성능이 저하됩니다.) – Nir
흠, 뭔가있을 수 있습니다. 결과 목록을 수정하지 못하게 할 때, 아직 일어나지 않아야 할 몇 가지 분명한 지연이 있습니다. 나는 이것을 조사 할 것입니다 - 아이디어에 감사드립니다. – devios1
감사합니다 Nir - 당신의 아이디어는 이전에 눈치 채지 못했던 UI 스레드에서 발생했던 주요 둔화를 확인하는 결과를 가져 왔습니다. 이를 검색 스레드로 이동하면 응답 성이 크게 향상되었습니다. 그래서 언뜻보기에는 상황이 거의 나쁘지 않습니다. :) – devios1