Как ускорить WPF DataGrid? - PullRequest
0 голосов
/ 06 июля 2010

Фон: У меня есть произвольный запрос, который выполняется, а затем я получаю данные - массив записей = массивы объектов. Я хотел бы просмотреть их с помощью DataGrid.

Проблема: Не кажется, что приложение достаточно отзывчиво. Переключение с запроса на запрос происходит медленно, переключение занимает около 1-2 секунд, и отображается только ~ 20 записей! Я хочу, чтобы переключение произошло мгновенно, вы нажимаете «следующий запрос» и сразу получаете результаты.

Код:

        // defining colums for a grid
        grid.Columns.Clear();

        int i = 0;
        foreach (var db_col in query.Names) // names of the colums
        {
            var col = new DataGridTextColumn();
            col.Header = db_col;
            col.Binding = new Binding(String.Format("Data[{0}]",i));
            grid.Columns.Add(col);
            ++i;
        }

        // adding rows to grid -- the culprit
        grid.Items.Clear();

        foreach (var db_row in query.Rows)
        {
            var row = new DataGridRow();
            row.Item = db_row;
            grid.Items.Add(row);
        }

Я не могу понять, что я могу по-другому - я перебираю строки и добавляю их одну за другой. Строки уже находятся в памяти, в данный момент связь с базой данных отсутствует. Откуда я знаю, что это (добавление строк) является причиной замедления? Я просто комментирую это, и приложение становится быстрым.

Мой ящик: 32-разрядная ОС Windows 7 Ultimate, процессор Intel Core2Duo 2,66 ГГц, 2 ГБ ОЗУ.

1 Ответ

1 голос
/ 06 июля 2010

Вы пытались вызвать BeginInit и EndInit, чтобы остановить обновление сетки после добавления каждого элемента?

grid.BeginInit();
grid.Items.Clear();

foreach (var db_row in query.Rows)
{
    var row = new DataGridRow();
    row.Item = db_row;
    grid.Items.Add(row);
}

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