|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
Добрый день. MS VS 2015, приложение WinForms, не корректно отрисовывается первый столбец в ListView, при измененном цвете фона (мерцает, пропадают линии). Подробней на видео: ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2016, 10:53 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
А разве там нельзя сделать проще - поменять цвет текста и фона? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2016, 08:17 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
yura-007, А зачем тебе это свое рисование в Listview? Зачем тебе виртуальный? В обычном режиме нормально справляется с 10-20-30 тысяч итемов. В динамическом режиме, когда много итемов обновляются в единицу времени. Проверял. P.S. От варианта если делать LV через API, нетовский контрол отстает в скорости в 1,5-2 раза (груз навешенной .Net модели), но это приемлимо. А цвета (текста и фона) -это CustomDraw, и если речь идет об итеме (строке) целиком, то в .Net помнится это уже имплементировано (хотя и с дефектами, по этой причине делал через API). Ну, если сабитемы раскрашивать, то тогда кажется только API. Зачем тебе этот попугай? Это некрасиво. Хочешь красиво, примени стиль "Explorer". Всякого рода мерцания обычно связаны с избытком кода, когда какой-нибудь Refresh (отрисовка) делается непрерывно. Скорее всего еще дефект реализации Listview в .Net , когда он перерисовывает например всякий раз весь итем целиком когда реально это не надо. Бодаться с этим очень и очень тяжело. Без найтивных API как правило никак, и при этом еще и не всегда получается. Мой совет: не используй "виртуальный режим". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2016, 23:53 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
Cat2, Можно, но если не в виртуальном режиме. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2016, 09:01 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
Дмитрий77, Спасибо за советы. Рисование, а именно изменение фона, нужно, т.к. есть задача такая. Список для отображения, постоянно динамически меняется, в обычном режиме обновление работает не так хорошо, как в виртуальном, поэтому его и использую. Хотя ты говоришь об обратном, может я конечно что не так делал. В целом все работает хорошо, список из нескольких тыс. строк отображается корректно, сортировка по столбцам, фильтры, все мгновенно, проблема только с отрисовкой первого столбца. Стиль "Explorer" это что имеется в виду? Ссылку можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2016, 09:23 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
попробуй использовать тройную буферизацию ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2016, 09:34 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
yura-007Cat2, Можно, но если не в виртуальном режиме. А что, енсть разница для отрисовки? Просто интересуюсь. Как-то никогда не надо было использовfть ListView ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2016, 09:34 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
Cat2, В обычном режиме все просто, работа с айтамами ListView напрямую, делается один раз - айтем такой-то = цвет фона и все остальное такой-то и все отображается хорошо, но это вариант не плох если таблица не большая и данные в ней статические, чем больше таблица, тем процесс загрузки данных в ListView и их отображение медленней, хотя может это я что не так делаю, тут написали что и так все должно летать. В виртуальном режиме приходится обрабатывать события в которых задаем текст для отображения, форматирование и все остальное, схема сложней, но в ней у меня как раз все летает. Я вот с этим полностью согласен: Дмитрий77 Скорее всего еще дефект реализации Listview в .Net , когда он перерисовывает например всякий раз весь итем целиком когда реально это не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2016, 10:17 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
yura-007Стиль "Explorer" это что имеется в виду? Ссылку можно? Код: vbnet 1. 2. 3. 4.
И чтоб не мерцал больше чем надо (но это для нормального): Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2016, 16:14 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
Дмитрий77yura-007Стиль "Explorer" это что имеется в виду? Ссылку можно? Код: vbnet 1. 2. 3. 4.
И чтоб не мерцал больше чем надо (но это для нормального): Код: vbnet 1. 2. 3. 4.
Спасибо за подсказку, даже не слышал о таком. В общем состряпал проект MS VS 2015 WinForm c#, на форме 3 ListView (обычный, виртуальный и Explorer), у всех включена двойная буферизация (в событии FormLoad). Итого, если требуется отобразить 100000 строк по 10 столбцов, при условии что значения в 8 столбцах каждую секунду меняются, на моем древнем ноутбуке (emachines e430 (AMD Sempron(tm) M100 2.0 GHz)), наиболее адекватно работает виртуальный ListView, при этом если просто загрузить статические 100000 строк и не обновлять значения, лучше работают два других, Explorer ListView совсем хорошо. Еще для виртуального сделал сортировку, т. к. наработки были, для остальных не заморачивался, обычно она требуется, как и раскраска отдельных строк. Проблема виртуального ListView обозначенная в данной теме понятное дело присутствует. В общем проект прикрепляю, сделал как умею, это совсем не значит что сделал правильно, любые замечания приветствуются, советы тем более! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 15:34 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
yura-007Итого, если требуется отобразить 100000 строк по 10 столбцов, при условии что значения в 8 столбцах каждую секунду меняются, Мне кажется что сто тысяч строк с обновлением каждую секунду ВСЕХ ста тысяч строк это таки перебор. Для моей задачи я тестировал 30-50тыс. строк, но при этом обновлялись за секунду м.б. 30-50. Чтоб если юзер смотрит в данный момент на эти 30-50 чтоб там ничего не глючило. Это на тесте, потому как на практике обычно этих строк 2-3 сотни и обновляются за секунду м.б. 2-3. Он по любому сдохнет при выполнении вашей задачи, если не в теч. первых секунд то в течении первой минуты точно. У вас комп элементарно не успевает за кодом (на эту операцию - обновить 100000 строк не хватит одной секунды). На загрузку 50000 строк с реальной информацией (а не с вашим циклом) нужно только скажем секунд 10 (а .Net это время еще и умножает на 2). А вы по всей (100000 строк!!!) конструкции еще собираетесь долбить каждую секунду. Да еще и раскрашивать чего-то в красные цвета. Я с "виртуальным" не работал, м.б. он и предназначен для таких монстро-объемов. Но уж по крайней мере красным то мазать по нему не стоит, если вам важны данные а не мазня на продажу (на продажу кстати данный вид все равно не катит). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2016, 01:51 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
Дмитрий77, Мне тоже так кажется, но задачи бывают разные и тому кто их генерирует может как раз таки так не казаться. Количество строк, согласно задачам, часто зависит от юзера, сколько он туда запихает, столько и должно отображаться, поэтому полезно быть готовому к самому печальному варианту. Виртуальный режим тем и хорош, что нет никаких строк, есть список в оперативной памяти который как бы проецируется в ListView. Благодаря чему разницы нет сколько строк отображать, тысяча, сто тысяч, миллион, скорость его работы будет примерно одна и та же (имеется ввиду его взаимодействия с юзером, а не обновление данных). Он работает медленней, в силу своих особенностей, при увеличении отображаемых столбцов и отображаемых строк, прокрутка работает медленней. На счет раскраски, тоже задачи могут быть разные, на данный момент требуется просто фон для особо важных строк красить красным и отображать всегда сверху. До этого проекта, была задача, нужно было красить разными цветами, в зависимости от значений в ячейках. Не думаю что раскраска это серьезная проблема, 10 т. строк в прикрепленном выше проекте красятся нормально в любом ListView. Кроме раскраски еще должна работать сортировка, т.е. сначала данные обновляются, затем сортируются в порядке заданном ранее юзером и только после этого отображаются. На счет "раз в секунду" я не совсем правильно выразился, это задержка 1 сек. между итерациями обновления данных в фоновом потоке. Понятно что процесс обновления 100000 строк не быстрый, но он ведь происходит за кулисами, пока юзер листает то что есть и если ему требуется такое огромное количество строк, то его нужно просто подготовить к тому что "раз в секунду" может не получится. Тут еще тройную буферизацию предлагали, этого еще не пробовал, потому что понятия не имею что это такое и как ее пробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2016, 10:20 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
yura-007Понятно что процесс обновления 100000 строк не быстрый, но он ведь происходит за кулисами, Какая разница, за кулисами или нет у вас прога встанет. Если ваш код и все что за этим следует, который вы долбите раз в секунду не выполнится за эту секунду. Даже если это как то и вытянет, вам юзеры предъявят 100% CPU. Я например местами злоупотребляю DoEvents (абсолютно безобидно, показывает м.б. 1-2сек пока выполняется другой процесс но умники кот. да и укажут на загрузку проца таки иногда находятся). В моем случае загрузка фальшивая, а в вашем самая что ни на есть настоящая. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2016, 19:43 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
Дмитрий77, Вы конечно правы, обновление 100000 строк тяжеловатая задача. Но на счет того что прога встанет, можно поспорить. Зависит конечно не в последнюю очередь, как эта прога написана и на чем она будет запускаться. На более менее современном ПК с пятигодовалым i7 тот проект который я здесь выкладывал не встает и проц. даже на 50% не грузится, данные обновляются с интервалом в 2 сек. (1 сек. задержка) и так работает как при запуске программы, так и через сутки непрерывной работы. Тестировал в ОС Windows 10, запущенной в VMWare Player запущенном в ОС Ubuntu на ноутбуке. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 09:31 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
yura-007Зависит конечно не в последнюю очередь, как эта прога написана MS Access легко показывает миллионы строк из ODBC источника ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 09:48 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
Изопропилyura-007Зависит конечно не в последнюю очередь, как эта прога написана MS Access легко показывает миллионы строк из ODBC источника Вопрос в частоте обновления отображаемых данных и затрачиваемых на это ресурсов. А вообще вопрос в заголовке темы . ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 10:00 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
yura-007, только первый столбец ? добавьте фиктивный в одно пиксель шириной ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 10:07 |
|
Некорректная отрисовка первого столбца ListView в виртуальном режиме, WinForms.
|
|||
---|---|---|---|
#18+
Изопропил, Обычно такие костыли и использую. Хочется же все таки без колхоза) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 10:14 |
|
|
start [/forum/topic.php?fid=20&msg=39288082&tid=1400404]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 173ms |
0 / 0 |