Производительность Flowdocument с таблицей с большим количеством данных - PullRequest
1 голос
/ 24 октября 2011

Что я пытаюсь сделать:
Создайте отчет на основе данных из базы данных, а затем сможете просмотреть и распечатать его. (Это в WPF C #)

Как мне это сделать: (динамически, с помощью кода)
Мое окно простое, это просто FlowDocumentPageViewer, в котором ничего нет.

  1. Я загружаю данные из базы данных
  2. Используйте LINQ, чтобы правильно сгруппировать все
  3. Инициализация нового Flowdocument
  4. Составьте таблицу с RowGroup
  5. Зациклить мои данные LINQed и заполнить RowGroup таблицами TableRows, которые содержат ячейки с необходимыми данными
  6. Добавить таблицу в документ Flow

И это прекрасно работает, за исключением случаев, когда количество записей достигает 10 КБ. Тогда по какой-то причине он просто загружает мой процессор до 25% и занимает 30 минут. Прокрутка также практически невозможна, ничего не происходит, она просто полностью замята. Но когда я получил 1к записей, это заняло 18 секунд. И с 2k, его 74 секунд.

Однако я не использую стандартный способ ячеек в таблицах, я должен создать TextBlock для каждой ячейки и использовать его с BlockUIContainer. Но после некоторого тестирования это не оказало большого влияния на создание документа.

Кто-нибудь с советами о вещах, о которых я должен беспокоиться? Это было бы серьезной помощью, я бью кирпичную стену здесь.

Я подумал, может быть, так, чтобы он отображал только текущую страницу, но я не могу знать, сколько страниц будет с FlowDocument.

Тип данных, которые я использую, это просто строки, а иногда и флажки (только для чтения).

Редактировать:
Время обработки кажется очень стабильным с запасом в 1 секунду. Но экспоненциально, с 3k это уже на 164 секунды.

Edit2:
После еще одного тестирования я обнаружил, что проблема заключается в том, что я добавляю TableCell в TableRow. Без этого это займет всего 1,6 секунды.

1 Ответ

0 голосов
/ 24 октября 2011

Причина в группировке.В wpf есть известная проблема производительности в этой функции.Попробуйте удалить группировку для теста, и вы увидите увеличение производительности!

...