Как я могу оптимизировать использование оперативной памяти, когда мне нужно показать пользователю большой объем данных?

#c# #wpf #datatable #datasource

#c# #wpf #datatable #источник данных

Вопрос:

У меня есть приложение, в котором я использую DataGrid для отображения данных пользователю. Я использую объект DataTable для хранения данных в памяти. DataTable содержит около 70 столбцов.

У меня очень большой набор данных. Я хочу отобразить это в DataGrid и использовать фильтры и другие функции управления данными DataGrid (такие как сортировка). Но у меня проблема: когда я загружаю все свои данные в объект DataSource, он потребляет более 1 ГБ оперативной памяти (MS Excel потребляет только 60 МБ). Это заставляет ОС интенсивно использовать swap и, конечно, замедляет работу всей системы.

Мой вопрос таков: есть ли какой-либо способ отобразить данные в DataGrid и использовать все расширенные функции управления данными без полной загрузки всех моих данных в объект DataSource?

Заранее благодарю вас.

Комментарии:

1. Вам нужно использовать виртуализацию. Проверьте это сообщение в блоге и это . Или это сообщение на форуме

2. извлечение всей таблицы в datagrid — не очень хороший дизайн… если ваши данные действительно используют такой объем памяти, вам следует сначала поискать альтернативные способы их фильтрации. Если ваше приложение когда-либо будет работать через Интернет с какой-либо базой данных, вы почувствуете истинное значение выражения «чертовски медленно».

Ответ №1:

Поскольку пользователь никогда не будет просматривать более одного экрана одновременно, вы никак не сможете объяснить ему, зачем для этого нужны гигабайты оперативной памяти.

База данных должна быть спроектирована / проиндексирована / оптимизирована таким образом, чтобы обеспечить частичное извлечение данных, по крайней мере, для «наиболее распространенных» случаев.

Вы можете, например, создать одну «отсортированную» версию вашего набора данных для 10 наиболее часто используемых критериев сортировки. Не стесняйтесь хранить только 1000 первых и 1000 последних строк. Используйте знания о том, что именно пользователь собирается делать с этими данными, чтобы найти более оптимизированные структуры данных и т.д…

Вы можете использовать методы, подобные применяемому Ajax, чтобы создать «живое» впечатление.