Использую DataGridView в режиме VirtualMode. Возможны таблицы с большим количеством строк: 100 тысяч и более. Вполне нормальная ситуация и виртуальный режим с этим справляется... ПОЧТИ
Есть команды подсвечивания строк таблицы (Selected = true). При этом подсвечиваться могут сразу много строк, может и все (CTRL+A, например). В этих случаях на больших таблицах резко растет память и приложение надолго зависает. Например для 100 тысяч записей зависает на 15-20 секунд, а память растет больше чем на 0.5Гб.
Явно проблема в том, что строки таблицы переходят в режим Unshared и забивают собой память. Пробовал ставить разные режимы Selection (FullRowSelection, RowHeaderSelection) — ничего не помогает, проблема остается.
Работать с SharedRow можно, но только не при установке Selected = true (падает Exception).
Есть ли какие-либо варианты решения этой проблемы?
D>DataGridView в режиме VirtualMode. Возможны таблицы с большим количеством строк: 100 тысяч и более. Вполне нормальная ситуация
Что за ситуация? Какой такой пользователь в состоянии обозреть в гриде 100k записей?
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Re[2]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
Здравствуйте, Osaka, Вы писали:
D>>DataGridView в режиме VirtualMode. Возможны таблицы с большим количеством строк: 100 тысяч и более. Вполне нормальная ситуация O>Что за ситуация? Какой такой пользователь в состоянии обозреть в гриде 100k записей?
Ну хорошо, не нормальная. надо очень удобный пейджинг вводить, чтобы пользователь парился и искал по страницам нужную запись. Помочь то есть чем?
Re[3]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
D>чтобы пользователь парился и искал по страницам нужную запись
Уверен, что весь загруженный набор пользователь всё равно не пролистывает (это не в человеческих силах), а значит грузить в грид все 100k — никакого смысла, хоть страницами хоть без. Чтобы посоветовать что-то дельное, надо знать что за задача. Что именно пользователь делает с таким огромным набором? D>Помочь то
"Помочь" — непереходный глагол. Фраза звучит как "Идти что".
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Re[4]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
Здравствуйте, Osaka, Вы писали:
D>>чтобы пользователь парился и искал по страницам нужную запись O>Уверен, что весь загруженный набор пользователь всё равно не пролистывает (это не в человеческих силах), а значит грузить в грид все 100k — никакого смысла, хоть страницами хоть без. Чтобы посоветовать что-то дельное, надо знать что за задача. Что именно пользователь делает с таким огромным набором? D>>Помочь то O>"Помочь" — непереходный глагол. Фраза звучит как "Идти что".
Ну ок, задача в том, чтобы расширить функциональность некоторой имеющейся таблицы. В частности было принято решение ее полностью переписать, так проще. Но она показывает сразу все строки. У них правда вообще записи кэшируются, и есть своей внутренний пейджинг, но здесь то супер-пейджинг, виртуальная таблица. Фактически кэшируются только те записи, которые на экране.
Проблема только вот с выделением строк.
Re: WinForms, DataGridView, VirtualMode. Проблема с Unshared
Здравствуйте, drag79, Вы писали:
D>Использую DataGridView в режиме VirtualMode. D>Есть ли какие-либо варианты решения этой проблемы?
Не уловил в чем проблема. Exception проблема или 20 сек проблема? В первом случае, код эксепшина можна? Во втором — пейджинг, прогрес бар или какой-нить худой фильтр, не?
---
ПроГLамеры объединяйтесь..
Re[2]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
Здравствуйте, Sinatr, Вы писали:
S>Здравствуйте, drag79, Вы писали:
D>>Использую DataGridView в режиме VirtualMode. D>>Есть ли какие-либо варианты решения этой проблемы?
S>Не уловил в чем проблема. Exception проблема или 20 сек проблема? В первом случае, код эксепшина можна? Во втором — пейджинг, прогрес бар или какой-нить худой фильтр, не?
Эксепшен говорит что для SharedRows нельзя использовать Selected. Я смотрел исходный код дот нета — там как раз проверка, что НЕ SharedRows.
Это не проблема в том смысле, что была просто попытка использовать SharedRows при простановке Selected = true.
Проблема конечно в ожидании, которое получается изза выделения памяти для всех строк. И это несмотря на утверждения официального гайда, по которому условия выполняются, а вот экономии памяти нет.
Фильтр — дело кастомное. А что даст пейджинг, даже если бы он был возможен? Ведь есть массовые операции выделения строк. По идее виртуальность таблицы и есть тот самый пейджинг. То, что не видит пользователь — и так не присутствует в памяти...
Конечно есть вариант, что использовать внутреннюю коллекцию отмеченных строк. Но ведь это головняк — ведение этих строк. Здесь объяснять не буду — если немного подумать, то станет понятно почему.
Re[3]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
Здравствуйте, drag79, Вы писали:
D>Проблема конечно в ожидании, которое получается изза выделения памяти для всех строк.
Показывайте модальный прогрес бар, по типу (правда не подскажу какие именно события ловить и как) и не парьтесь — если уж ктота выбрал 10к строк, то пусть сидит и мучается. Я персонально люблю ограничивать выборки датой и фиксированным максимальным размером (2000 строк, если выборка больше, то пользователь просто увидит сообщение по типу "Показаны первые 2000"), это совершенно его проблемы, а не мои, если он не может толково задать фильтр.
Пейджинг это идея подсмотренная у гугля, я сам ее никогда не организовывал, но такое есть.
---
ПроГLамеры объединяйтесь..
Re[4]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
Здравствуйте, Sinatr, Вы писали:
S>Здравствуйте, drag79, Вы писали:
D>>Проблема конечно в ожидании, которое получается изза выделения памяти для всех строк.
S>Показывайте модальный прогрес бар, по типу (правда не подскажу какие именно события ловить и как) и не парьтесь — если уж ктота выбрал 10к строк, то пусть сидит и мучается. Я персонально люблю ограничивать выборки датой и фиксированным максимальным размером (2000 строк, если выборка больше, то пользователь просто увидит сообщение по типу "Показаны первые 2000"), это совершенно его проблемы, а не мои, если он не может толково задать фильтр.
S>Пейджинг это идея подсмотренная у гугля, я сам ее никогда не организовывал, но такое есть.
Даже если процессор не проблема, то проблема в памяти. Она то кончается, и дойдет до свопа. И там придется пользователю смотреть прогресс бар часами
Поясняю почему я обратился. Виртуальный режим — это такой супер пейджинг. Вроде таблица есть, а вроде ее и нет, кроме того что показывается на экране. И проблемы начинаются только при Select строк таблицы. И по идее проблем то быть не должно — в соответствии с гайдом. Но похоже помочь мне здесь не могут ((
Re[5]: WinForms, DataGridView, VirtualMode. Проблема с Unsha