나는 종종 2000 개 정도의 구성 요소 컨트롤 (TextBoxes, TextBlocks, ComboBoxes 등)이있는 사용자 정의 컨트롤을 가지고 있으며, 내 응용 프로그램이 원하는만큼 빠르게 실행되지 않습니다.많은 양의 데이터가있는 WPF 컨트롤의 렌더링 속도를 높이려면 어떻게합니까?
2000 컨트롤은 처음에는 많은 것처럼 보일 수 있지만 실제로는 많은 응용 프로그램에서 일반적인 시나리오 인 10 열과 200 행이있는 WPF 데이터 그리드를 나타냅니다.
가 여기에 같은 데이터 그리드 모방을 믿고 매우 간단한 샘플, 그리고 나는이 200ms 정도 렌더링 시간을보고 있어요 :
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Stopwatch stopwatch = Stopwatch.StartNew();
ScrollViewer scrollViewer = new ScrollViewer();
StackPanel stackPanel = new StackPanel();
for (int rowIndex = 0; rowIndex < 200; rowIndex++)
for (int columnIndex = 0; columnIndex < 10; columnIndex++)
stackPanel.Children.Add(new TextBlock { Text = Guid.NewGuid().ToString() });
scrollViewer.Content = stackPanel;
this.Content = scrollViewer;
UpdateLayout(); // Force a UI layout so we can get an accurate stopwatch reading
MessageBox.Show(stopwatch.Elapsed.ToString(), "UI Layout Time");
}
이 내가이 예제를 만들기 위해 생각할 수있는만큼 간단을, 200ms는 사용자가 소프트웨어를 느리게 인식하고 잠재적으로 느리게 생각하기에 충분합니다.
데이터 그리드의 실제 컨트롤 인 경우 컨트롤은 TextBlocks보다 훨씬 복잡하고 잠재적으로 IValueConverters 및 Styles/DataTemplates와 같은 시간을 가질 수 있습니다.
데이터가 많은 컨트롤의로드 시간을 단축하기 위해 할 수있는 일이 있습니까?
잠시 동안이 기능을 사용해 왔지만 다른 사람들에게 전달할 좋은 링크를 찾지 못했습니다. 감사!!!!! – tsells