Производительность Flowdocument с таблицей с большим количеством данных
Что я пытаюсь сделать:
Создайте отчет на основе данных из базы данных, а затем сможете просмотреть и распечатать его. (Это в WPF C#)
Как я это делаю: (динамически, через код)
Мое окно простое, это просто FlowDocumentPageViewer, в котором ничего нет.
- Я загружаю данные из базы данных
- Используйте LINQ, чтобы сгруппировать все правильно
- Инициализировать новый Flowdocument
- Составьте таблицу с RowGroup
- Зациклить мои данные LINQed и заполнить RowGroup с TableRows, которые содержат ячейки с необходимыми данными
- Добавьте таблицу в Flowdocument
И это прекрасно работает, за исключением случаев, когда количество записей достигает 10 КБ. Тогда по какой-то причине он просто загружает мой процессор до 25% и занимает 30 минут. Прокрутка также практически невозможна, ничего не происходит, она просто полностью замята. Но когда я получил 1к записей, это заняло 18 секунд. И с 2k, его 74 секунд.
Однако я не использую стандартный способ ячеек в таблицах, я должен создать TextBlock для каждой ячейки и использовать его с BlockUIContainer. Но после некоторого тестирования это не оказало большого влияния на создание документа.
Кто-нибудь с советами о вещах, о которых я должен беспокоиться? Будет большая помощь, я бью кирпичную стену здесь.
Я подумал, может быть, так, чтобы он отображал только текущую страницу, но я не могу знать, сколько страниц будет с FlowDocument.
Тип данных, которые я использую, это просто строки, а иногда и флажки (только для чтения).
Редактировать:
Время обработки кажется очень стабильным, с запасом в 1 секунду. Но экспоненциально, с 3k это уже на 164 секунды.
Edit2:
После еще одного тестирования я обнаружил, что проблема заключается в том, что я добавляю TableCell в TableRow. Без этого это займет всего 1,6 секунды.
1 ответ
Причина в группировке. В wpf есть известная проблема производительности в этой функции. Попробуйте удалить группировку для теста, и вы увидите увеличение производительности!