powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
25 сообщений из 74, страница 2 из 3
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38887630
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пошло-поехало. Просил же специально:

Дмитрий77...не надо советов ... использовать что-то вместо Listview.

именно объектная модель Listview в .Net с точки зрения выполнения скоростной задачи с большим количеством итемов / большой динамикой изменений этих итемов.
Единственный выбор который мне надо сделать: между .Net Listview и API-реализацией ( для этой задачи )

Быстрее видимо сделать, а потом уже смотреть на живых тестах. Если не прокатит, воткну API-шные, тем более есть считай готовый класс под эти нужды.

Меня .Net и Listview вполне устраивает.
А в другой форме у меня 15 Listview на разных вкладках - по 2-10 итемов в каждом. И че мне их на C++/API рисовать?
В .Net макет удобно делать: всякие там Dock=Fill, Padding очень помогают, в том же VB6 сплошные ресайзы надо писать.

>А вот сколько кнопочек-текстбоксов-итп максимально возможно разместить на форме (винформ)?
В VB6 контролов на форме может быть 255 максимум. Но можно использовать массивы (неудобно жутко).
В .Net на сколько понимаю такого ограничения точно нет, м.б. есть какое-то большое но мне думаю хватит.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38887733
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77В .Net на сколько понимаю такого ограничения точно нет,
WinAPI ограничивает
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38887735
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

обложался таки :)
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888171
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Пошло-поехало. Просил же специально
я ваш самописный контрол не использовал, а листвью - когда использовал, не насиловал десятками тысяч элементов (а грид да - и знаю что будет если).
Что я мог бы вам другое посоветовать - если нести хоть какую-то ответственность за свои слова?
Ваше право делать на компьютере что вам заблагорассудится я не оспаривал.
Статьи за жестокое обращение с вычислительными ресурсами еще нигде не ввели.
:-)
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888526
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проще сделать ListView в WPF и внедрить в WF, чем пытаться запилить свой ListView в WF. имхо конечно :)
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888531
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesпроще сделать ListView в WPF и внедрить в WF, чем пытаться запилить свой ListView в WF. имхо конечно :)
гланды всегда через задний проход удалять нужно?
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888689
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 и его производные, но последний пример менее удачен, так как нет описываемой динамики.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888708
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 20000 заданий "сразу".

нет описываемой динамики.

Идея состоит в том, чтобы не отображать динамику того, на что никто не смотрит.
Значит, список из 20000 строк должен быть разбит на логические ветки, группы, подгруппы - и вот когда пользователь конкретный процесс захочет посмотреть - его и показывать с "динамикой".
И даже тут - обновлять строку на экране 50 раз в секунду - это мягко говоря, неправильно. Никто из нас, людей, этих изменений не в состоянии заметить. Так и незачем "метать бисер перед свиньями". Не будете загружать компьютер бессмысленной работой - он будет вам благодарен, и сосредоточится на основной задаче...
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888734
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129 обновлять строку на экране 50 раз в секунду - это мягко говоря, неправильно.
Об обновлении одной строки 50 раз в секунду речь не идет.
У меня там таймаут обновления где-то секунда.
Но в предельных нагрузочных случаях за секунду может одновременно обновиться 50 строк (разных), или например добавиться 50 строк.

У меня эта модель прекрасно работает на
VB6+Listview_API
но плохо работала на
VB6+Listview(объектная модель VB6)

Сейчас я хочу сделать ту же модель на
.Net + Listview(объектная модель .Net)

Естественно с учетом опыта(объектная модель VB6) у меня некоторые опасения.

Чего рассуждать, в процессе изготовления пока. Только динамику фиг протестируешь пока приложение целиком готово не будет.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888752
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Но в предельных нагрузочных случаях за секунду может одновременно обновиться 50 строк (разных), или например добавиться 50 строк.

Ну и какую проблему вы опасаетесь получить?
Если пользователь будет смотреть именно на эти строки, и они изменятся, то очевидно что 50 строк через секунду спокойно отобрязят измененные данные.
Вопрос вот в том, как вы делаете это обновление - через перезагрузку списка?
Стер старые - нарисовал новые?
Тут возможны варианты.
И опять скажу - WPF с байндингом - как раз для этого...
:-)
Как там было в Римской империи? "Карфаген должен быть разрушен".
:-)
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888768
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129И опять скажу - WPF с байндингом - как раз для этого...зачем корове седло?
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888772
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Чего рассуждать, в процессе изготовления пока. Только динамику фиг протестируешь пока приложение целиком готово не будет.
не делай преждевременной оптимизации - будет плохо - заменишь реализацию

Интерфейс к списку сделай сейчас так, чтоб легко замену реализации произвести
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888773
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129Вопрос вот в том, как вы делаете это обновление - через перезагрузку списка?
Нет конечно.
Через правку item/subitems.
На языке API:
LVM_INSERTITEM
LVM_SETITEM

D129Ну и какую проблему вы опасаетесь получить?

15016495
В VB6(объектная модель) была например следующая проблема:

авторВыполняем любую из команд:

Код: vbnet
1.
2.
3.
  Set LItem = ListView1.ListItems.Add
  LItem.SubItems(1) = "Subitemtext" 'с любым итемом()
  ListView1.ListItems(1).Text = "text1" 'с любым итемом()


Проблема в том, что когда любая из них выполняется (не для выделенного, а для любого итема), то ListView делает для выделенной записи (для той кот. Selected) прокрутку в видимую область (EnsureVisible)

Т.е. когда много записей, они постоянно добавляются и изменяются, невозможно даже сделать прокрутку (все время скручивает на выделенную запись).

Вылечилось только полным отказом от объектной модели.

D129И опять скажу - WPF
В WPF не лез. Но насколько понимаю ListView в WPF -это вообще другой контрол. Не по теме.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888785
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилне делай преждевременной оптимизации - будет плохо - заменишь реализацию
Интерфейс к списку сделай сейчас так, чтоб легко замену реализации произвести
Примерно по этому пути я и иду. В VB6 именно реализация и была заменена. У меня перед глазами 2 VB6 варианта, с которых и слизываю. Есть надежда/предположение что .Net-объектная модель таки заведется.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888816
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77авторВыполняем любую из команд:

Код: vbnet
1.
2.
3.
  Set LItem = ListView1.ListItems.Add
  LItem.SubItems(1) = "Subitemtext" 'с любым итемом()
  ListView1.ListItems(1).Text = "text1" 'с любым итемом()


Проблема в том, что когда любая из них выполняется (не для выделенного, а для любого итема), то ListView делает для выделенной записи (для той кот. Selected) прокрутку в видимую область (EnsureVisible)

Т.е. когда много записей, они постоянно добавляются и изменяются, невозможно даже сделать прокрутку (все время скручивает на выделенную запись).

Вылечилось только полным отказом от объектной модели.А гасить прокрутку в сабклассинге не пробовал? Обычно это универсальное средство от нежелательных телодвижений.

Отлавливаешь LVM_INSERTITEM/LVM_SETITEM, которые отправляет объектная модель, после них ожидаешь событие, инициализирующее прокрутку, сливаешь его.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888848
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Antonariy]Дмитрий77А гасить прокрутку в сабклассинге не пробовал? Обычно это универсальное средство от нежелательных телодвижений.
Отлавливаешь ...
Вот скажи, мне сейчас это зачем, VB6 лечить?
Если ты глянешь в ту тему, то увидишь что подобные заплатки делать пытались, под твоим кстати чутким руководством.
После неуспешных попыток было плюнуто и сделано с нуля на API, не без трудозатрат, но успешно (сразу было ясно что успешно, но теперь еще и проверено временем - по крайне мере я не вижу больше писем от упертых юзеров типа: я тут попытался добавить 30000 job-ов и у меня все нафиг зависло. Раньше иногда получал подобные баг-репорты).

А в .Net-модели этого бага скорее всего нет (его и в 6-х контролах (которые не пригодны сам знаешь почему) на VB6 нет).
Но фиг знает что в .Net-Listview есть.
Ты вроде в этом понимаешь, с тобой тогда обсуждали "скоростные характеристики", типа API-Listview "быстрее" и т.п.
Что нибудь про .Net-листвью плохое/хорошее сказать можешь? Ну, с каким-то модельными свойствами типа "ShowItemTooltips" лучше лишний раз не играться, это понятно.

А по динамике/скорости что касается добавления/правки item/subitems и "лишних индусских расчетов"?

По сортировке по столбцам, когда много записей? Тоже самое что в API? -там пришлось попотеть особенно с датами если помнишь (в VB6 в объектной модели кстати быстрая сортировка и не требует крушений мозга).
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888939
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Вот скажи, мне сейчас это зачем, VB6 лечить?Я имел ввиду дотнетовский, насколько я помню твои изыскания, он оказался тоже на базе comctl.
Или нет?

Дмитрий77Если ты глянешь в ту тему, то увидишь что подобные заплатки делать пытались, под твоим кстати чутким руководством.Давно это было, забыл уже :)

Дмитрий77Что нибудь про .Net-листвью плохое/хорошее сказать можешь? Неа, в дотнете под десктоп я мало пишу, пока что все требования покрываются стандартными возможностями. Из хорошего - GridLines понравились :)
А сложные списки с активными элементами вывожу через html в веббраузер.

А в VB6 листвью я ковырял, решая почти твою же задачу - в программу-спамфильтр шустро сыпалась почта, причем новые айтемы нужно было добавлять в начало, и чтобы ничего не мигало.
Чтобы не мигало, какие-то события как раз пришлось подавить.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888940
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

делай свою, только не на API винды, а с использованием библиотек net, а то с переносимостью куча проблем будет
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888948
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Дмитрий77,

делай свою, только не на API винды, а с использованием библиотек net, а то с переносимостью куча проблем будетВообще-то библиотеки net сами используют api винды, являясь по факту объектной надстройка над ними для удобства использования лохами и школьниками снижения порога входимости, так что с переносимостью проблем как раз меньше.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888960
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)делай свою, только не на API винды, а с использованием библиотек net, а то с переносимостью куча проблем будет
"стандартные" контролы можно подумать святым духом питаются
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888961
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, кой какие результаты предварительные.
3 Listview -в общей сложности 500 записей (чего есть сейчас в тестовой БД).
Делаю статическую загрузку (циклом)

API в VB6 загружает за 70мс (чисто добавление в Listview)
Объектный в VB6 делает тоже самое за 200мс
Делаю тот же тест на .Net -650мс -до хрена

Был код типа:
Код: vbnet
1.
2.
3.
4.
5.
6.
    'добавляем запись в таблицу
    Dim LItem As ListViewItem = Me.ListView1.Items.Add(New ListViewItem)
    For i As Integer = 1 To 19 : LItem.SubItems.Add(New ListViewItem.ListViewSubItem) : Next 'добавим пустые SubItems
    LItem.SubItems(1).Text = str_1
    LItem.SubItems(2).Text = str_2
    ...


Переделал так
Код: vbnet
1.
2.
3.
4.
5.
6.
    Dim LItem As New ListViewItem
    For i As Integer = 1 To 19 : LItem.SubItems.Add(New ListViewItem.ListViewSubItem) : Next 'добавим пустые SubItems
    LItem.SubItems(1).Text = str_1
    LItem.SubItems(2).Text = str_2
    ...
    Me.ListView1.Items.Add(LItem)


И стало те же 70-80мс.
Думаю, если слегка оптимизировать, результат будет нормальный. Надо делать, а не рассуждать.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38888969
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 И стало те же 70-80мс.Логично, в первом случае ты теребишь реальный листвью, который на каждый тычок отзывается каскадом событий, а во втором - абстракцию в памяти, ни к чему не привязанную.

Если количество субайтемов известно и фиксировано, попробуй SubItems.Add({"subitem1", "subitem2", ...}), по идее будет еще быстрее.
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38889075
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилkealon(Ruslan)делай свою, только не на API винды, а с использованием библиотек net, а то с переносимостью куча проблем будет
"стандартные" контролы можно подумать святым духом питаются
нет конечно, но они будут поддерживаться на уровне платформы, а WinAPI в другой операционке скорее всего не будет

Дмитрий77,

в компоненте VirtualTreeView используется такой ход:
указывается, что элементов столько то, а загрузка данных в них делается при необходимости
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38889085
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понаписали-то.

ListView.VirtualMode Property
...
Рейтинг: 0 / 0
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
    #38889095
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)а WinAPI в другой операционке скорее всего не будет
спасибо, посмеялся
...
Рейтинг: 0 / 0
25 сообщений из 74, страница 2 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]