Работа с очень большими наборами данных & как раз вовремя загрузки

У меня есть приложение .NET, написанное на C # (.NET 4.0). В этом приложении мы должны прочитать большой набор данных из файла и отобразить его содержимое в виде сетки. Итак, для этого я поместил DataGridView в форму. В нем 3 столбца, все данные столбцов взяты из файла. Изначально в файле было около 600 000 записей, что соответствует 600. 000 строк в DataGridView.

Я быстро обнаружил, что DataGridView разрушается с таким большим набором данных, поэтому мне пришлось переключиться в виртуальный режим. Для этого я сначала полностью прочитал файл в 3 разных массива (соответствующих 3 столбцам), а затем срабатывает событие CellValueNeeded, я предоставляю правильные значения из массивов.

Однако может быть огромное (ОГРОМНОЕ! ) количество записей в этом файле, как мы быстро выяснили. Когда размер записи очень велик, считывание всех данных в массив или List <> и т. Д. Кажется невозможным. Мы быстро сталкиваемся с ошибками выделения памяти. (Исключение нехватки памяти.)

Мы застряли на этом, но потом поняли, зачем сначала читать все данные в массивы, почему бы не прочитать файл по запросу, когда срабатывает событие CellValueNeeded? Вот что мы сейчас делаем: открываем файл, но ничего не читаем, и когда срабатывают события CellValueNeeded, мы сначала ищем () в правильную позицию в файле, а затем читаем соответствующие данные.

Это лучшее, что мы могли придумать, но, во-первых, это довольно медленно, что делает приложение медленным и неудобным для пользователя. Во-вторых, мы не можем не думать, что должен быть лучший способ добиться этого. Например, некоторые двоичные редакторы (такие как HXD) невероятно быстры для файлов любого размера, поэтому я хотел бы знать, как этого можно достичь.

О, и чтобы добавить к нашим проблемам, в виртуальном режиме DataGridView, когда мы устанавливаем RowCount равным доступному количеству строк в файле (скажем, 16 000 000), DataGridView даже инициализируется через некоторое время. Любые комментарии по этой «проблеме» также будут оценены.

Спасибо

9
задан Community 22 September 2017 в 17:44
поделиться