|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Для обычных статических таблиц при небольшом количестве итемов - стандартное чуть-допиливание через API и все в шоколаде. Но есть у меня одна задача (представление -таблица), когда итемов много (например 1000, 10000), при этом большое количество итемов могут быстро изменяться, например 50 изменений в секунду. И плюс нужна еще сортировка по столбцам - быстрая. Исторически, будучи в VB6 я изначально использовал объектную модель. Но были кое-какие глюки и некоторые запаздывания при большом количестве изменений. Собственно тему затрагивал здесь: Проблемы с ListView Я тогда не поленился и нарисовал свой класс - полностью через API, начиная с CreateWindowEx. И оно себя оправдало: глюки ушли, производительность резко повысилась из-за отсутствия лишних перерисовок и т.п., которыми страдает VB6 объектная модель ListView. Единственное, с чем пришлось повозиться: сортировка, особенно сортировка дат. В отличии от объектной VB6 модели пришлось делать самому (в объектной модели .Net делается тоже ручками примерно по тому же принципу). Но в итоге осилил и с неплохими скоростными показателями: 15067121 ==== Мне не надо подсказок с кодами, не надо советов типа WPF или использовать что-то вместо Listview. Мне хотелось бы знать ваше мнение, насколько хороша/безглючна именно объектная модель Listview в .Net с точки зрения выполнения скоростной задачи с большим количеством итемов / большой динамикой изменений этих итемов. Единственный выбор который мне надо сделать: между .Net Listview и API-реализацией (для этой задачи). Последняя проверена в боевых условиях, первая по большому счету кот в мешке и пока не сделаешь не поймешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2015, 22:25 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77 Мне хотелось бы знать ваше мнение, насколько хороша/безглючна именно объектная модель Listview в .Net с точки зрения выполнения скоростной задачи с большим количеством итемов / большой динамикой изменений этих итемов. смотри сорсы, мне сдаётся, что тебя не устроит :) зря ты с дотнетом связался, c++ тебе нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2015, 22:44 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Изопропилсмотри сорсы, мне сдаётся, что тебя не устроит :) Почему так думаешь? Что-то конкретное углядел? По идее если ничего не начудили, то объектная модель должна работать не хуже/не медленнее API-шной. В VB6 начудили. Изопропилзря ты с дотнетом связался, c++ тебе нужен Да не обязательно, у меня API-класс на VB6 готовый есть - под себя писал. Под .Net его недолго переписать - со всеми сортировками. Я просто думаю, идти по этому пути, или все-таки на базе .Net-ListView эту задачу делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2015, 23:02 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77когда итемов много (например 1000, 10000), при этом большое количество итемов могут быстро изменяться, например 50 изменений в секунду. И плюс нужна еще сортировка по столбцам - быстрая. .... пока не сделаешь не поймешь. А кто у вас заказчик? как он успевает заметить 50 изменений в секунду? Вы, часом не для инопланетных агентов проэктик делаете? Лист, грид, и другие визуальные компоненты - должны отображать для человека -который не различает событий с частотой выше 18 в секунду, и по заявлениям психологов не может одновременно держать в поле внимания более 9 обьектов... Вот передомной список - как я могу узнать что в нем 10000 записей? Как я могу одновременно увидеть эти 10000 строк? На обычном экране? Уже давно для отображения ипользуется поиск с фильтром, а для прокрутки больших списков - постраничный просмотр. Кстати, в WPF этот просмотр не надо писать самому - уже есть. :-/ ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 10:20 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129А кто у вас заказчик? Автор и есть заказчик. Абсолютно беспощаден к себе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 11:27 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129Вот передомной список - как я могу узнать что в нем 10000 записей? В статусбаре написать :) D129Как я могу одновременно увидеть эти 10000 строк? На обычном экране?А зачем? Главное, чтобы они были в списке, и за ними не надо было лишний раз бегать на сервер. Если работа со списком динамичная, то это сильно экономит время. У меня была задача, требующая таких списков - управление базой организаций в колл-центре. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 11:32 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
AntonariyВ статусбаре написать :) .... У меня была задача, требующая таких списков - управление базой организаций в колл-центре. Есть две задачи - хранение информации, и ее отображение. Для отображения информацию надо подоготовить. И не давать визуальному элементу больше, чем человек (я надеюсь еще) может видеть и воспринимать, принимать решения, искать отличие итп... Использование строки статуса - это как раз подготовка и отображение обобщения - и это правильно. Но для чего же решать проблемы прорисовки тысяч обьектов, когда пользователь их все равно не увидит? Только потому, что компьютер сейчас это может? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 11:38 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129AntonariyВ статусбаре написать :) .... У меня была задача, требующая таких списков - управление базой организаций в колл-центре. Есть две задачи - хранение информации, и ее отображение. Для отображения информацию надо подоготовить. И не давать визуальному элементу больше, чем человек (я надеюсь еще) может видеть и воспринимать, принимать решения, искать отличие итп... Использование строки статуса - это как раз подготовка и отображение обобщения - и это правильно. Но для чего же решать проблемы прорисовки тысяч обьектов, когда пользователь их все равно не увидит? Только потому, что компьютер сейчас это может?сферические рассуждения в вакууме. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 11:39 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Прорисовывается вообще-то только то, что помещается на экране. Строка проскроллилась за пределы - все, она больше не прорисовывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 11:41 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 11:47 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
AntonariyПрорисовывается вообще-то только то, что помещается на экране. Строка проскроллилась за пределы - все, она больше не прорисовывается. Это если запрограммировать так. Винформовский грид больше 100 000 строк не тянет - это знание из разряда "сделаешь - поймешь". Я делал прокрутку по страницам сам. А потом заменил на купленный контрол. В котором кто-то другой сделал постраничную прокрутку с оптимизацией. Стандартный компонент (листвью итп) предназначен для показа ну 1000 компонентов (?). Если в него пихать больше - что не запрещено - он разве обязан продолжать так же хорошо работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 11:47 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Antonariyсферические рассуждения в вакууме. Разве решить что программа делать не должна - это пустопорожние рассуждения? А вот сколько кнопочек-текстбоксов-итп максимально возможно разместить на форме (винформ)? Знаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 11:50 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129Antonariyсферические рассуждения в вакууме. Разве решить что программа делать не должна - это пустопорожние рассуждения? А вот сколько кнопочек-текстбоксов-итп максимально возможно разместить на форме (винформ)? Знаете? 255? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 11:54 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
WinnipuhD129пропущено... Разве решить что программа делать не должна - это пустопорожние рассуждения? А вот сколько кнопочек-текстбоксов-итп максимально возможно разместить на форме (винформ)? Знаете? 255? от 1500 до 2600 +- - определяется при установке Виндовс в зависимости от конфигурации системы. Каждый контрол получает хендл - и им есть максимум. Натолкнулся когда чинил аппликацию, где индусы читали базу, и динамически создавали табы и на каждом табе заполняли типа "карточку" - все данные обьекта. На тестовой базе - где строк было 10-20 - все работало, и даже в начале на продакшен - тоже. Пока не превысило где-то 300 строк - и ага. Проходило как "баг" - некая мелкая неприятность, ведь до этого все отлично работало... :-/ Тоже вот - решили не обсуждать сферического коника... а сразу "дело делать"... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 12:00 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129Это если запрограммировать так.Так уже запрограммировано в винде. В общем и целом отрисовка происходит по событию WM_PAINT, в это событие передаются координаты RECT, который надо перерисовать. Это событие посылает программе винда. Конкретно у листвью генерируется аналогичное событие для каждого элемента, который нужно перерисовать. Если элемент не видно или он не изменился с момента прошлой отрисовки, оно не генерируется. Тормоза идут от каких-то индусских расчетов по этому списку, не связанных с отрисовкой. Я свой список отображал в гриде, который не тормозил ни на каком количестве записей. Самая большая выборка на моей памяти была около 18к записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 12:01 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129Antonariyсферические рассуждения в вакууме. Разве решить что программа делать не должна - это пустопорожние рассуждения?Естественно. Это же не ваша программа, вы не знаете, что и как она делать должна. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 12:02 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129А вот сколько кнопочек-текстбоксов-итп максимально возможно разместить на форме (винформ)? Знаете?Нет. Зачем это знать, а тем более размещать? Каждый текстбокс это отдельное окно с собственным дескриптором, которое жрет ресурсы. Если требуется столько текстбоксов, то лучше воткнуть грид с тексбоксами, который будет одним окном. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 12:05 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
виртуализация не подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 12:43 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Antonariy Это же не ваша программа, вы не знаете, что и как она делать должна. Ок, убедили. А кто знает? Топикастер? Ну судя по его первому посту - он ожидал чего-то вроде "молодец мужик, написал сам цельный компонент, залез в дебри, разобрался что к чему, теперь можно не париться - самодельный компонент все сьест - миллион строк ему не помеха!" "Да сразу было ясно что самоделка стабильнее фирменного компонента! Раз он так себя ведет с большими коллекциями..." :-) А ведь ситуация, когда стандартный компонент не делает то, что тебе нужно - это вопрос "а нужно ли это тебе?".... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 12:59 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
AntonariyD129А вот сколько кнопочек-текстбоксов-итп максимально возможно разместить на форме (винформ)? Знаете?Нет. Зачем это знать, а тем более размещать? Каждый текстбокс это отдельное окно с собственным дескриптором, которое жрет ресурсы. Если требуется столько текстбоксов, то лучше воткнуть грид с тексбоксами, который будет одним окном. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 13:00 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
[quot D129]AntonariyЕсли требуется столько текстбоксов, то лучше почитал. Решил что уже ответил. А кнопку нажал не ту. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 13:02 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129Ок, убедили. А кто знает? Топикастер?Да. Он прямо написал, что ему нужно. D129 А ведь ситуация, когда стандартный компонент не делает то, что тебе нужно - это вопрос "а нужно ли это тебе?".... Или это вопрос "а нужен ли стандартный компонент?". Зависит от принципиальности требования. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 13:27 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Antonariyа нужен ли стандартный компонент? топикстартеру dotnet не нужен, вот в чём прикол ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 13:30 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
ИзопропилAntonariyа нужен ли стандартный компонент? топикстартеру dotnet не нужен подходит, вот в чём прикол ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 13:42 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Antonariydotnet не подходит, вот в чём прикол Вот оно что... оказывается, таблички из базы данных надо на Фокале отображать... :-)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2015, 14:26 |
|
Насколько объектный 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 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
kealon(Ruslan)а WinAPI в другой операционке скорее всего не будет спасибо, посмеялся ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 09:10 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Изопропилkealon(Ruslan)а WinAPI в другой операционке скорее всего не будет спасибо, посмеялся хорошо смеется тот, кто реально не обнаружит его в другой операционке(!) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 12:14 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Winnipuh, другую операционку сначала найди , где это может быть востребовано ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 12:18 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
О чем спор, не пойму. WinForms давно заброшен. Так что шанс увидеть WinForms-овский ListView на других платформах стремится к нулю. Учитывая завязку WPF на DirectX, я тоже не вижу у нее шансов на другой платформе. Разве что когда-нибудь на OpenGL переделают, но я о таких планах не слышал. Либо Gtk для кроссплатформенности использовать, либо Html + Js. Вполне в духе нестандартных решений от Дмитрия. Но по скорости, боюсь, ни одна из этих платформ не потянет. Вот последовал бы совету Изопропила про С++, можно было бы Qt юзать. И быстро, и кроссплатформенно, и без извратов с WinAPI :-) Хотя нет, здесь уже WinAPI - не изврат, а уважаемая технология. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 12:50 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
мне кайф дает вечная озабоченность о какой то кроссплатформенности :) чего бл* кроссплатформенность? неужто листьвю? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 13:51 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
ИзопропилWinnipuh, другую операционку сначала найди , где это может быть востребовано чё искать то, Mono под юниксом - некоторые пользуются ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 14:01 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Arm79Либо Gtk для кроссплатформенности использовать, либо Html + Js. Вполне в духе нестандартных решений от Дмитрия. Но по скорости, боюсь, ни одна из этих платформ не потянет.HTML+JS по скорости ничем не хуже WPF на обычных гуйных задачах. зы: ListView, содержащий 10 килозаписей, никому не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 14:12 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
ViPRosмне кайф дает вечная озабоченность о какой то кроссплатформенности :) чего бл* кроссплатформенность? неужто листьвю? +1 Тоже всегда думаю - дурь какая... если ты делаешь полезную аппликацию - то могут ради нее и винду установить... В любой конторе сейчас создать виртуальную машину - не проблема... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 14:14 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Алексей Кзы: ListView, содержащий 10 килозаписей, никому не нужен.Тебя кто-то выбрал за всех отвечать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 14:46 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
AntonariyАлексей Кзы: ListView, содержащий 10 килозаписей, никому не нужен.Тебя кто-то выбрал за всех отвечать? А что, прокручивать список из 2 тысяч файлов никогда не приходилось? Чтобы найти различие ... да хотябы в окончании названия файла... каких нибудь 5-6 особых букв... на второй сотне уже! думаешь - надо поиск запустить, пусть компьютер думает, у него гигагерцев много.... :-) Разве нет? Интерфейс взаимодействия с пользователем - ГУИ который, он зачем вообще? Чтобы пользователь нашел, и решение принял. Стирать, копировать, остановить, или запустить.... А не чтобы крутил-крутил, и пропустил... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 15:35 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129на второй сотне уже! думаешь - надо поиск запустить, пусть компьютер думает, у него гигагерцев много.... :-) Разве нет?Да. Но одно дело поиск в памяти, занимаемой листвью, и совсем другое ходить за поиском на сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 15:47 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
AntonariyДа. Но одно дело поиск в памяти, занимаемой листвью, и совсем другое ходить за поиском на сервер. Кто мешает скачать в память нужные данные, а отображать кусочек из них? Ну и скажем прямо, ничего страшного в том, чтобы лазить на сервер за данными, нет. В общем, для того он и нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 15:52 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
А впрочем плохой пример, айтемы нельзя прятать. Другое дело, когда нужно выбирать группу айтемов по какому-либо хорошо заметному признаку, когда нужно не искать иголку в стоге сена, вытащить из него копну. А потом сразу еще одну - по другому признаку. И еще. Каждый раз колупать фильтры и отправлять их на сервер не продуктивно выходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 15:54 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Arm79Ну и скажем прямо, ничего страшного в том, чтобы лазить на сервер за данными, нет.Не скажем. В некоторых задачах это медленно даже если сервер на том же компе. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 15:56 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
AntonariyКаждый раз колупать фильтры и отправлять их на сервер не продуктивно выходит. Фильтровать можно и на клиенте. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:01 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
AntonariyArm79Ну и скажем прямо, ничего страшного в том, чтобы лазить на сервер за данными, нет.Не скажем. В некоторых задачах это медленно даже если сервер на том же компе. Если сложный запрос с кучей джойнов или агрегирующий, - возможно. Если речь идет об обычном селекте - самое то передавать условия выборки на сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:03 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
kealon(Ruslan)ИзопропилWinnipuh, другую операционку сначала найди , где это может быть востребовано чё искать то, Mono под юниксом - некоторые пользуются и GUI пишут, ага. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:15 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Изопропили GUI пишут, ага. Пишут пишут :-) Правда редко. Но пишут. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:18 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129AntonariyКаждый раз колупать фильтры и отправлять их на сервер не продуктивно выходит. Фильтровать можно и на клиенте.Какая разница, где их колупать? Ручная работа одинаковая. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:20 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
AntonariyD129пропущено... Фильтровать можно и на клиенте.Какая разница, где их колупать? Ручная работа одинаковая. Ну так и скажите - не хочу писать никаких фильтров, пусть грид и лист за меня работают, да и пользователю будет нескучно - тренировка внимания и добросовестности еще никому не мешала в жизни! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:30 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129Antonariyпропущено... Какая разница, где их колупать? Ручная работа одинаковая. Ну так и скажите - не хочу писать никаких фильтров,А я так и говорю. D129 да и пользователю будет нескучно - тренировка внимания и добросовестности еще никому не мешала в жизни! :)Много ли нужно внимания, чтобы отличить одну сотню записей от другой? Конкретный пример — раскидывание организаций по операторам. Вытаскиваем кучу записей, сортируем по форме собственности (например), Вася обзванивает ГУПы, Петя ЗАО, Гена ООО. Так сложно найти, где заканчивается ГУП и начинается ЗАО? Если не слепой как крот, то не сложно абсолютно. Нажали на первую запись с ГУП, промотали до ЗАО, с шифтом щелкнули на последнюю ЗАО-запись (это выделение, есличо), назначить Васе. Всё. Повторить с ЗАО. Нафига за каждой формой собственности по отдельности в базу ходить? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:58 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
AntonariyНафига за каждой формой собственности по отдельности в базу ходить? А если надо будет всех, кто на улице Космонавтов? :-) и опять же - грид (обычный) держит до 20 тысяч записей. Для большинства задач - достаточно. А вот меня очень попросили сделать фильтр для списка из 1700 записей - так как там записи похожи друг на друга, и глазами выискивать границу - тяжело. В листвью - ситуация хуже. Он как бы не для точного поиска задумывался - а для беглого просмотра. Если в нем будет 10 000 иконок - это любой глаз устанет их разглядывать - и нужен будет поиск по фильтру. А вы не хотите его писать. :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 17:21 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
D129AntonariyНафига за каждой формой собственности по отдельности в базу ходить? А если надо будет всех, кто на улице Космонавтов? :-) и опять же - грид (обычный) держит до 20 тысяч записей. Для большинства задач - достаточно. А вот меня очень попросили сделать фильтр для списка из 1700 записей - так как там записи похожи друг на друга, и глазами выискивать границу - тяжело. На случай космонавтов есть кнопка простого фильтра по списку - на скриншоте вторая слева. А для запросов к базе есть целый мастер, он для первичной выборки, и он может фильтровать как угодно. Там же можно указать и тех же космонавтов, если только космонавты из базы и нужны. Как правило используются два критерия - регион + вид деятельности, они задаются мастером, а дальнейшая детализация происходит в списке. В общем, я предусмотрел все сценарии. Но самая распространенная с некоторых пор операция - разбить список поровну между несколькими юзерами. Фильтр тут не поможет. Правильней было бы сделать автоматическую операцию "разбить поровну" и вообще не ползать по списку, но программа ископаемая, и дорабатывать ее нет никакого желания. D129В листвью - ситуация хуже. Он как бы не для точного поиска задумывался - а для беглого просмотра. Если в нем будет 10 000 иконок - это любой глаз устанет их разглядывать - и нужен будет поиск по фильтру. А вы не хотите его писать. :-(Листвью на 10к записей в виде иконок это безусловно бред, на таких объемах я подразумеваю лишь его report-представление. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 17:55 |
|
Насколько объектный Listview в .Net устойчив/безглючен при нагрузках/объемах данных
|
|||
---|---|---|---|
#18+
Дмитрий77 ... насколько хороша/безглючна именно объектная модель Listview в .Net с точки зрения выполнения скоростной задачи с большим количеством итемов / большой динамикой изменений этих итемов. Единственный выбор который мне надо сделать: между .Net Listview и API-реализацией (для этой задачи). Отвлекался много. Доделал наконец, протестировал в контексте приложения под нагрузкой. Сойдет. Фактически тоже самое что через API. Глюки типа тех что есть в объектной модели VB6 отсутствуют. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2015, 14:22 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1401675]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
46ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
100ms |
get tp. blocked users: |
2ms |
others: | 369ms |
total: | 560ms |
0 / 0 |