|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Пошло-поехало. Просил же специально: Дмитрий77...не надо советов ... использовать что-то вместо Listview. именно объектная модель Listview в .Net с точки зрения выполнения скоростной задачи с большим количеством итемов / большой динамикой изменений этих итемов. Единственный выбор который мне надо сделать: между .Net Listview и API-реализацией ( для этой задачи ) Быстрее видимо сделать, а потом уже смотреть на живых тестах. Если не прокатит, воткну API-шные, тем более есть считай готовый класс под эти нужды. Меня .Net и Listview вполне устраивает. А в другой форме у меня 15 Listview на разных вкладках - по 2-10 итемов в каждом. И че мне их на C++/API рисовать? В .Net макет удобно делать: всякие там Dock=Fill, Padding очень помогают, в том же VB6 сплошные ресайзы надо писать. >А вот сколько кнопочек-текстбоксов-итп максимально возможно разместить на форме (винформ)? В VB6 контролов на форме может быть 255 максимум. Но можно использовать массивы (неудобно жутко). В .Net на сколько понимаю такого ограничения точно нет, м.б. есть какое-то большое но мне думаю хватит. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 18:51 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77В .Net на сколько понимаю такого ограничения точно нет, WinAPI ограничивает ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 21:54 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Изопропил, обложался таки :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 21:57 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77Пошло-поехало. Просил же специально я ваш самописный контрол не использовал, а листвью - когда использовал, не насиловал десятками тысяч элементов (а грид да - и знаю что будет если). Что я мог бы вам другое посоветовать - если нести хоть какую-то ответственность за свои слова? Ваше право делать на компьютере что вам заблагорассудится я не оспаривал. Статьи за жестокое обращение с вычислительными ресурсами еще нигде не ввели. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 11:40 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
проще сделать ListView в WPF и внедрить в WF, чем пытаться запилить свой ListView в WF. имхо конечно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 14:44 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Roman Mejtesпроще сделать ListView в WPF и внедрить в WF, чем пытаться запилить свой ListView в WF. имхо конечно :) гланды всегда через задний проход удалять нужно? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 14:49 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129ваш самописный контрол не использовал, а листвью - когда использовал, не насиловал десятками тысяч элементов ... жестокое обращение с вычислительными ресурсами:-) Ни о каком самописном контроле речь не идет. Речь идет исключительно об этом: List View (Windows) - MSDN - Microsoft И об этом: ListView - класс (System.Windows.Forms) - MSDN - Microsoft Причем второе есть не более чем Net-обертка над первым. Если использовать первое, то никаких лишних "вычислений" я точно не делаю. Предпочтительнее использовать второе , т.к. это удобней, более понятно и менее трудозатратно. Но объектная обертка, как было указано может страдать : 1) дополнительными индусскими вычислениями 2) дополнительными индусскими идеями, которые не всегда плохи, но иногда приводят к глюкам. Пример с тулбаром я недавно приводил. Под "нагрузкой" оно может иметь очень негативные последствия. И в этом случае оправдан API-вариант . Примером классической программы от Microsoft где именно Listview используется с подобной динамикой/объемами является "Windows Fax and Scan" (Консоль факсов в XP). Скриптом можно добавить хоть 20000 заданий "сразу". На серверных OS можно использовать хоть 100 модемов (=100 одновременных вызовов). При отправке информация в "активных" строчках динамически меняется. У меня реализовано примерно тоже самое. Никакие самопало-гриды здесь не катят. Другой пример -Outlook Express и его производные, но последний пример менее удачен, так как нет описываемой динамики. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 16:32 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77 20000 заданий "сразу". нет описываемой динамики. Идея состоит в том, чтобы не отображать динамику того, на что никто не смотрит. Значит, список из 20000 строк должен быть разбит на логические ветки, группы, подгруппы - и вот когда пользователь конкретный процесс захочет посмотреть - его и показывать с "динамикой". И даже тут - обновлять строку на экране 50 раз в секунду - это мягко говоря, неправильно. Никто из нас, людей, этих изменений не в состоянии заметить. Так и незачем "метать бисер перед свиньями". Не будете загружать компьютер бессмысленной работой - он будет вам благодарен, и сосредоточится на основной задаче... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 16:41 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129 обновлять строку на экране 50 раз в секунду - это мягко говоря, неправильно. Об обновлении одной строки 50 раз в секунду речь не идет. У меня там таймаут обновления где-то секунда. Но в предельных нагрузочных случаях за секунду может одновременно обновиться 50 строк (разных), или например добавиться 50 строк. У меня эта модель прекрасно работает на VB6+Listview_API но плохо работала на VB6+Listview(объектная модель VB6) Сейчас я хочу сделать ту же модель на .Net + Listview(объектная модель .Net) Естественно с учетом опыта(объектная модель VB6) у меня некоторые опасения. Чего рассуждать, в процессе изготовления пока. Только динамику фиг протестируешь пока приложение целиком готово не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 17:02 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77Но в предельных нагрузочных случаях за секунду может одновременно обновиться 50 строк (разных), или например добавиться 50 строк. Ну и какую проблему вы опасаетесь получить? Если пользователь будет смотреть именно на эти строки, и они изменятся, то очевидно что 50 строк через секунду спокойно отобрязят измененные данные. Вопрос вот в том, как вы делаете это обновление - через перезагрузку списка? Стер старые - нарисовал новые? Тут возможны варианты. И опять скажу - WPF с байндингом - как раз для этого... :-) Как там было в Римской империи? "Карфаген должен быть разрушен". :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 17:14 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129И опять скажу - WPF с байндингом - как раз для этого...зачем корове седло? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 17:30 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77Чего рассуждать, в процессе изготовления пока. Только динамику фиг протестируешь пока приложение целиком готово не будет. не делай преждевременной оптимизации - будет плохо - заменишь реализацию Интерфейс к списку сделай сейчас так, чтоб легко замену реализации произвести ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 17:32 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129Вопрос вот в том, как вы делаете это обновление - через перезагрузку списка? Нет конечно. Через правку item/subitems. На языке API: LVM_INSERTITEM LVM_SETITEM D129Ну и какую проблему вы опасаетесь получить? 15016495 В VB6(объектная модель) была например следующая проблема: авторВыполняем любую из команд: Код: vbnet 1. 2. 3.
Проблема в том, что когда любая из них выполняется (не для выделенного, а для любого итема), то ListView делает для выделенной записи (для той кот. Selected) прокрутку в видимую область (EnsureVisible) Т.е. когда много записей, они постоянно добавляются и изменяются, невозможно даже сделать прокрутку (все время скручивает на выделенную запись). Вылечилось только полным отказом от объектной модели. D129И опять скажу - WPF В WPF не лез. Но насколько понимаю ListView в WPF -это вообще другой контрол. Не по теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 17:34 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Изопропилне делай преждевременной оптимизации - будет плохо - заменишь реализацию Интерфейс к списку сделай сейчас так, чтоб легко замену реализации произвести Примерно по этому пути я и иду. В VB6 именно реализация и была заменена. У меня перед глазами 2 VB6 варианта, с которых и слизываю. Есть надежда/предположение что .Net-объектная модель таки заведется. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 17:41 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77авторВыполняем любую из команд: Код: vbnet 1. 2. 3.
Проблема в том, что когда любая из них выполняется (не для выделенного, а для любого итема), то ListView делает для выделенной записи (для той кот. Selected) прокрутку в видимую область (EnsureVisible) Т.е. когда много записей, они постоянно добавляются и изменяются, невозможно даже сделать прокрутку (все время скручивает на выделенную запись). Вылечилось только полным отказом от объектной модели.А гасить прокрутку в сабклассинге не пробовал? Обычно это универсальное средство от нежелательных телодвижений. Отлавливаешь LVM_INSERTITEM/LVM_SETITEM, которые отправляет объектная модель, после них ожидаешь событие, инициализирующее прокрутку, сливаешь его. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 18:14 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
[quot Antonariy]Дмитрий77А гасить прокрутку в сабклассинге не пробовал? Обычно это универсальное средство от нежелательных телодвижений. Отлавливаешь ... Вот скажи, мне сейчас это зачем, VB6 лечить? Если ты глянешь в ту тему, то увидишь что подобные заплатки делать пытались, под твоим кстати чутким руководством. После неуспешных попыток было плюнуто и сделано с нуля на API, не без трудозатрат, но успешно (сразу было ясно что успешно, но теперь еще и проверено временем - по крайне мере я не вижу больше писем от упертых юзеров типа: я тут попытался добавить 30000 job-ов и у меня все нафиг зависло. Раньше иногда получал подобные баг-репорты). А в .Net-модели этого бага скорее всего нет (его и в 6-х контролах (которые не пригодны сам знаешь почему) на VB6 нет). Но фиг знает что в .Net-Listview есть. Ты вроде в этом понимаешь, с тобой тогда обсуждали "скоростные характеристики", типа API-Listview "быстрее" и т.п. Что нибудь про .Net-листвью плохое/хорошее сказать можешь? Ну, с каким-то модельными свойствами типа "ShowItemTooltips" лучше лишний раз не играться, это понятно. А по динамике/скорости что касается добавления/правки item/subitems и "лишних индусских расчетов"? По сортировке по столбцам, когда много записей? Тоже самое что в API? -там пришлось попотеть особенно с датами если помнишь (в VB6 в объектной модели кстати быстрая сортировка и не требует крушений мозга). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 18:49 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77Вот скажи, мне сейчас это зачем, VB6 лечить?Я имел ввиду дотнетовский, насколько я помню твои изыскания, он оказался тоже на базе comctl. Или нет? Дмитрий77Если ты глянешь в ту тему, то увидишь что подобные заплатки делать пытались, под твоим кстати чутким руководством.Давно это было, забыл уже :) Дмитрий77Что нибудь про .Net-листвью плохое/хорошее сказать можешь? Неа, в дотнете под десктоп я мало пишу, пока что все требования покрываются стандартными возможностями. Из хорошего - GridLines понравились :) А сложные списки с активными элементами вывожу через html в веббраузер. А в VB6 листвью я ковырял, решая почти твою же задачу - в программу-спамфильтр шустро сыпалась почта, причем новые айтемы нужно было добавлять в начало, и чтобы ничего не мигало. Чтобы не мигало, какие-то события как раз пришлось подавить. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 21:32 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77, делай свою, только не на API винды, а с использованием библиотек net, а то с переносимостью куча проблем будет ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 21:34 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Дмитрий77, делай свою, только не на API винды, а с использованием библиотек net, а то с переносимостью куча проблем будетВообще-то библиотеки net сами используют api винды, являясь по факту объектной надстройка над ними для удобства использования лохами и школьниками снижения порога входимости, так что с переносимостью проблем как раз меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 22:06 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
kealon(Ruslan)делай свою, только не на API винды, а с использованием библиотек net, а то с переносимостью куча проблем будет "стандартные" контролы можно подумать святым духом питаются ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 22:21 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Ну вот, кой какие результаты предварительные. 3 Listview -в общей сложности 500 записей (чего есть сейчас в тестовой БД). Делаю статическую загрузку (циклом) API в VB6 загружает за 70мс (чисто добавление в Listview) Объектный в VB6 делает тоже самое за 200мс Делаю тот же тест на .Net -650мс -до хрена Был код типа: Код: vbnet 1. 2. 3. 4. 5. 6.
Переделал так Код: vbnet 1. 2. 3. 4. 5. 6.
И стало те же 70-80мс. Думаю, если слегка оптимизировать, результат будет нормальный. Надо делать, а не рассуждать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 22:24 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77 И стало те же 70-80мс.Логично, в первом случае ты теребишь реальный листвью, который на каждый тычок отзывается каскадом событий, а во втором - абстракцию в памяти, ни к чему не привязанную. Если количество субайтемов известно и фиксировано, попробуй SubItems.Add({"subitem1", "subitem2", ...}), по идее будет еще быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 22:46 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Изопропилkealon(Ruslan)делай свою, только не на API винды, а с использованием библиотек net, а то с переносимостью куча проблем будет "стандартные" контролы можно подумать святым духом питаются нет конечно, но они будут поддерживаться на уровне платформы, а WinAPI в другой операционке скорее всего не будет Дмитрий77, в компоненте VirtualTreeView используется такой ход: указывается, что элементов столько то, а загрузка данных в них делается при необходимости ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 08:31 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 09:00 |
|
|
start [/forum/topic.php?fid=20&msg=38888772&tid=1401675]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
113ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 345ms |
total: | 561ms |
0 / 0 |