2011-08-31 3 views
0

나는 종종 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와 같은 시간을 가질 수 있습니다.

데이터가 많은 컨트롤의로드 시간을 단축하기 위해 할 수있는 일이 있습니까?

답변

3

개념을 확인하십시오 : UI Virtualization. 볼 수있는 영역을 너무 많이 제어하지 않으면 도움이됩니다.

+0

잠시 동안이 기능을 사용해 왔지만 다른 사람들에게 전달할 좋은 링크를 찾지 못했습니다. 감사!!!!! – tsells

관련 문제