Как ускорить рендеринг элемента управления WPF с большим количеством данных? - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть пользовательский элемент управления, который часто имеет 2000 или около того компонентных элементов управления (TextBoxes, TextBlocks, ComboBoxes и т. Д.), И мое приложение работает не так быстро, как хотелось бы.

Поначалу 2000 элементов управления могут показаться большими, но на самом деле они представляют собой только сетку данных WPF с 10 столбцами и 200 строками, что часто встречается во многих приложениях.

Вот очень простой пример, который, по моему мнению, имитирует такую ​​сетку данных, и я наблюдаю время рендеринга около 200 мс:

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");
    }

Это так просто, как я могу себе представить, чтобы сделать этот пример, но 200 мс все же достаточно для того, чтобы пользователь заметил и потенциально подумал, что программное обеспечение работает медленно.

Если бы это был реальный элемент управления с сеткой данных, элементы управления, скорее всего, были бы более сложными, чем TextBlocks, и потенциально имели бы дополнительные отстойы времени, такие как IValueConverters и Styles / DataTemplates.

Что я могу сделать, чтобы ускорить время загрузки элементов управления, которые содержат много данных?

1 Ответ

3 голосов
/ 01 сентября 2011

Проверьте концепцию: UI Virtualization . Это должно помочь, если у вас не слишком много элементов управления в видимой области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...