@Smiz001
C#-developer

Как уменьшить расход памяти в DataGrid у WPF?

Имеется DataGrid куда выгружаются данные по запросу пользователя. Кол-во данных более 10000 строк и примерно 12 колонок.
В качестве ItemSourse использую DataTable, который получаю в слудующем виде
var dataTable = new DataTable();
  dataTable.Load(con.ExecuteReader(select));

Этот DataTable содержит более 10000 строк, в памяти занимает не более 20 мб, но когда я пытаюсь это все вывести на DataGrid, то захваты памяти достигает более 2Гб, что неприемлемо в моей ситуации.
Есть ли какие-нибудь способы по уменьшению расхода памяти при отрисовки данных в DataGrid?
Скрин с памятью
5b4c9e656165a573769365.png
  • Вопрос задан
  • 548 просмотров
Решения вопроса 4
@kttotto
пофиг на чем писать
Однозначно нужен постраничный вывод. Никто такие объемы за раз не выводит.
В крайнем случае подгрузка по мере скрола, с удалением из грида верхней части.
Даже в ширину не обязательно все выводить, можно не самые критичные данные скрыть за кнопочкой "подробнее" и подгружать для просмотра по клику как дополнительные данные.
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Если исключить страдальцев, готовых скроллиить 10000 строк, то нормальным решением будет ограничение top 1000 или top 500 и наборы отзывчивых фильтров
Ответ написан
Комментировать
Вообще, при таком количестве данных, как уже говорили выше, надо использовать виртулизацию. Гуглите запрос wpf virtual grid.
Вот, к примеру, реализация на codeproject https://www.codeproject.com/Articles/775352/WPF-Vi...
Ответ написан
Комментировать
DarkRaven
@DarkRaven
разработка программного обеспечения
Я поддержу совет с постраничным выводом.
Кроме этого, проверьте, как будет себя вести таблица без использования DataTable, как источника данных.
Можно сделать класс-контракт, его свойства промаркировать Display-атрибутами. Затем, коллекцию с элементами данного класса использовать как источник данных.

Сам по себе, DataTable весьма избыточный для простой задачи отображения данных, и, если вы его используете только как источник данных (без использования возможности сортировки, к примеру и т.п.) - он не нужен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@pig_master
C#, WPF developer
Еще необходимо посмотреть на код DataGrid'а. Похоже, что Вы выключили в нем виртуализацию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы