У меня есть приложение .NET, написанное на C # (.NET 4.0).В этом приложении мы должны прочитать большой набор данных из файла и отобразить содержимое в виде сетки.Итак, для этого я поместил DataGridView на форму.Он имеет 3 столбца, все данные столбца поступают из файла.Первоначально в файле было около 600 000 записей, что соответствует 600 000 строк в DataGridView.
Я быстро обнаружил, что DataGridView разрушается с таким большим набором данных, поэтому мне пришлось переключиться в виртуальный режим.Для этого я сначала полностью прочитал файл в 3 различных массива (соответствующих 3 столбцам), а затем запускается событие CellValueNeeded, я предоставляю правильные значения из массивов.
Однако может быть огромный(ОГРОМНОЕ!) Количество записей в этом файле, как мы быстро выяснили.Когда размер записи очень большой, считывание всех данных в массив или список <> и т. Д. Представляется невозможным.Мы быстро сталкиваемся с ошибками выделения памяти.(Исключение из-за недостатка памяти).
Мы застряли там, но потом поняли, зачем сначала читать все данные в массивы, почему бы не прочитать файл по требованию, когда происходит событие CellValueNeeded?Вот что мы делаем сейчас: мы открываем файл, но ничего не читаем, и когда запускаются события CellValueNeeded, мы сначала ищем () правильную позицию в файле, а затем читаем соответствующие данные.
Это лучшее, что мы можем придумать, но, во-первых, это довольно медленно, что делает приложение медленным и не удобным для пользователя.Во-вторых, мы не можем не думать, что должен быть лучший способ сделать это.Например, некоторые бинарные редакторы (например, HXD) невероятно быстры для любого размера файла, поэтому я хотел бы знать, как этого можно достичь.
О, и, чтобы добавить к нашим проблемам, в виртуальном режимеDataGridView, когда мы устанавливаем для RowCount доступное количество строк в файле (скажем, 16.000.000), DataGridView требуется некоторое время, чтобы даже инициализировать себя.Любые комментарии к этой «проблеме» также приветствуются.
Спасибо