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