WinForms, DataGridView, VirtualMode. Проблема с Unshared Row
От: drag79  
Дата: 19.04.12 02:24
Оценка:
Использую DataGridView в режиме VirtualMode. Возможны таблицы с большим количеством строк: 100 тысяч и более. Вполне нормальная ситуация и виртуальный режим с этим справляется... ПОЧТИ

Есть команды подсвечивания строк таблицы (Selected = true). При этом подсвечиваться могут сразу много строк, может и все (CTRL+A, например). В этих случаях на больших таблицах резко растет память и приложение надолго зависает. Например для 100 тысяч записей зависает на 15-20 секунд, а память растет больше чем на 0.5Гб.
Явно проблема в том, что строки таблицы переходят в режим Unshared и забивают собой память. Пробовал ставить разные режимы Selection (FullRowSelection, RowHeaderSelection) — ничего не помогает, проблема остается.
Работать с SharedRow можно, но только не при установке Selected = true (падает Exception).

Есть ли какие-либо варианты решения этой проблемы?
winforms datagridview virtualmode
Re: WinForms, DataGridView, VirtualMode. Проблема с Unshared
От: Osaka  
Дата: 20.04.12 23:24
Оценка:
D>DataGridView в режиме VirtualMode. Возможны таблицы с большим количеством строк: 100 тысяч и более. Вполне нормальная ситуация
Что за ситуация? Какой такой пользователь в состоянии обозреть в гриде 100k записей?
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Re[2]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
От: drag79  
Дата: 21.04.12 15:47
Оценка:
Здравствуйте, Osaka, Вы писали:

D>>DataGridView в режиме VirtualMode. Возможны таблицы с большим количеством строк: 100 тысяч и более. Вполне нормальная ситуация

O>Что за ситуация? Какой такой пользователь в состоянии обозреть в гриде 100k записей?

Ну хорошо, не нормальная. надо очень удобный пейджинг вводить, чтобы пользователь парился и искал по страницам нужную запись. Помочь то есть чем?
Re[3]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
От: Osaka  
Дата: 22.04.12 03:08
Оценка:
D>чтобы пользователь парился и искал по страницам нужную запись
Уверен, что весь загруженный набор пользователь всё равно не пролистывает (это не в человеческих силах), а значит грузить в грид все 100k — никакого смысла, хоть страницами хоть без. Чтобы посоветовать что-то дельное, надо знать что за задача. Что именно пользователь делает с таким огромным набором?
D>Помочь то
"Помочь" — непереходный глагол. Фраза звучит как "Идти что".
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Re[4]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
От: drag79  
Дата: 23.04.12 01:25
Оценка:
Здравствуйте, Osaka, Вы писали:

D>>чтобы пользователь парился и искал по страницам нужную запись

O>Уверен, что весь загруженный набор пользователь всё равно не пролистывает (это не в человеческих силах), а значит грузить в грид все 100k — никакого смысла, хоть страницами хоть без. Чтобы посоветовать что-то дельное, надо знать что за задача. Что именно пользователь делает с таким огромным набором?
D>>Помочь то
O>"Помочь" — непереходный глагол. Фраза звучит как "Идти что".


Ну ок, задача в том, чтобы расширить функциональность некоторой имеющейся таблицы. В частности было принято решение ее полностью переписать, так проще. Но она показывает сразу все строки. У них правда вообще записи кэшируются, и есть своей внутренний пейджинг, но здесь то супер-пейджинг, виртуальная таблица. Фактически кэшируются только те записи, которые на экране.
Проблема только вот с выделением строк.
Re: WinForms, DataGridView, VirtualMode. Проблема с Unshared
От: Sinatr Германия  
Дата: 23.04.12 10:57
Оценка:
Здравствуйте, drag79, Вы писали:

D>Использую DataGridView в режиме VirtualMode.

D>Есть ли какие-либо варианты решения этой проблемы?

Не уловил в чем проблема. Exception проблема или 20 сек проблема? В первом случае, код эксепшина можна? Во втором — пейджинг, прогрес бар или какой-нить худой фильтр, не?
---
ПроГLамеры объединяйтесь..
Re[2]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
От: drag79  
Дата: 23.04.12 13:19
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Здравствуйте, drag79, Вы писали:


D>>Использую DataGridView в режиме VirtualMode.

D>>Есть ли какие-либо варианты решения этой проблемы?

S>Не уловил в чем проблема. Exception проблема или 20 сек проблема? В первом случае, код эксепшина можна? Во втором — пейджинг, прогрес бар или какой-нить худой фильтр, не?


Эксепшен говорит что для SharedRows нельзя использовать Selected. Я смотрел исходный код дот нета — там как раз проверка, что НЕ SharedRows.
Это не проблема в том смысле, что была просто попытка использовать SharedRows при простановке Selected = true.

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

Фильтр — дело кастомное. А что даст пейджинг, даже если бы он был возможен? Ведь есть массовые операции выделения строк. По идее виртуальность таблицы и есть тот самый пейджинг. То, что не видит пользователь — и так не присутствует в памяти...

Конечно есть вариант, что использовать внутреннюю коллекцию отмеченных строк. Но ведь это головняк — ведение этих строк. Здесь объяснять не буду — если немного подумать, то станет понятно почему.
Re[3]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
От: Sinatr Германия  
Дата: 23.04.12 15:37
Оценка:
Здравствуйте, drag79, Вы писали:

D>Проблема конечно в ожидании, которое получается изза выделения памяти для всех строк.


Показывайте модальный прогрес бар, по типу (правда не подскажу какие именно события ловить и как) и не парьтесь — если уж ктота выбрал 10к строк, то пусть сидит и мучается. Я персонально люблю ограничивать выборки датой и фиксированным максимальным размером (2000 строк, если выборка больше, то пользователь просто увидит сообщение по типу "Показаны первые 2000"), это совершенно его проблемы, а не мои, если он не может толково задать фильтр.

Пейджинг это идея подсмотренная у гугля, я сам ее никогда не организовывал, но такое есть.
---
ПроГLамеры объединяйтесь..
Re[4]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
От: drag79  
Дата: 24.04.12 02:03
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Здравствуйте, drag79, Вы писали:


D>>Проблема конечно в ожидании, которое получается изза выделения памяти для всех строк.


S>Показывайте модальный прогрес бар, по типу (правда не подскажу какие именно события ловить и как) и не парьтесь — если уж ктота выбрал 10к строк, то пусть сидит и мучается. Я персонально люблю ограничивать выборки датой и фиксированным максимальным размером (2000 строк, если выборка больше, то пользователь просто увидит сообщение по типу "Показаны первые 2000"), это совершенно его проблемы, а не мои, если он не может толково задать фильтр.


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


Даже если процессор не проблема, то проблема в памяти. Она то кончается, и дойдет до свопа. И там придется пользователю смотреть прогресс бар часами

Поясняю почему я обратился. Виртуальный режим — это такой супер пейджинг. Вроде таблица есть, а вроде ее и нет, кроме того что показывается на экране. И проблемы начинаются только при Select строк таблицы. И по идее проблем то быть не должно — в соответствии с гайдом. Но похоже помочь мне здесь не могут ((
Re[5]: WinForms, DataGridView, VirtualMode. Проблема с Unsha
От: drag79  
Дата: 27.04.12 01:45
Оценка:
Ну что, никто помочь не может? Подскажите хоть куда копать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.