|
WPF: Торможение потокового документа
|
|||
---|---|---|---|
#18+
Сделал примитивное окошко для вывода лога (текстовый лог, но строки могут быть разного цвета). Примерно так: Код: xml 1. 2. 3.
Код: c# 1. 2. 3. 4. 5. 6. 7.
При 400 элементах лога уже начинает заметно подтормаживать, как добавление элементов, так и скроллирование самого лога. Неужели для потокового документа это уже достаточно тяжелое визуальное дерево? А как же тогда работают мощные потоковые документы, там же могут быть и тысячи примитивных элементов? Или я просто что-то плохо понимаю/что-то не так делаю? Или же надо плюнуть и использовать какой-нибудь ListBox с виртуализацией? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 19:16 |
|
WPF: Торможение потокового документа
|
|||
---|---|---|---|
#18+
Shocker.ProСделал примитивное окошко для вывода лога (текстовый лог, но строки могут быть разного цвета). Примерно так: Код: xml 1. 2. 3.
Код: c# 1. 2. 3. 4. 5. 6. 7.
При 400 элементах лога уже начинает заметно подтормаживать, как добавление элементов, так и скроллирование самого лога. Неужели для потокового документа это уже достаточно тяжелое визуальное дерево? А как же тогда работают мощные потоковые документы, там же могут быть и тысячи примитивных элементов? Или я просто что-то плохо понимаю/что-то не так делаю? Или же надо плюнуть и использовать какой-нибудь ListBox с виртуализацией? любая прокручиваемая область виртуализируются. Если это лог, логично разбить его на строки и выводить их в панели виртуализации VirualizationStackPanel через ItemsControl, если нужен другой подход, не ItemsControl, можно сделать свой Visual объект или даже Render. В качестве строк может легко выступить TextBlock, у него есть свойство Inling для Span и прочего. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 21:55 |
|
WPF: Торможение потокового документа
|
|||
---|---|---|---|
#18+
Shocker.ProИли же надо плюнуть и использовать какой-нибудь ListBox с виртуализацией?Да, в WPF визуальное дерево очень прожорливое. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 07:42 |
|
WPF: Торможение потокового документа
|
|||
---|---|---|---|
#18+
Roman MejtesShocker.ProСделал примитивное окошко для вывода лога (текстовый лог, но строки могут быть разного цвета). Примерно так: Код: xml 1. 2. 3.
Код: c# 1. 2. 3. 4. 5. 6. 7.
При 400 элементах лога уже начинает заметно подтормаживать, как добавление элементов, так и скроллирование самого лога. Неужели для потокового документа это уже достаточно тяжелое визуальное дерево? А как же тогда работают мощные потоковые документы, там же могут быть и тысячи примитивных элементов? Или я просто что-то плохо понимаю/что-то не так делаю? Или же надо плюнуть и использовать какой-нибудь ListBox с виртуализацией? любая прокручиваемая область виртуализируются. Если это лог, логично разбить его на строки и выводить их в панели виртуализации VirualizationStackPanel через ItemsControl, если нужен другой подход, не ItemsControl, можно сделать свой Visual объект или даже Render. В качестве строк может легко выступить TextBlock, у него есть свойство Inling для Span и прочего.Может проще тогда сгенерировать HTML и показать его в WebBrowser? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 07:44 |
|
WPF: Торможение потокового документа
|
|||
---|---|---|---|
#18+
Алексей КМожет проще тогда сгенерировать HTML и показать его в WebBrowser? :-)Лог заполняется в реальном времени и по умолчанию автопрокручивается. То есть пользователь при желании может сидеть и пялиться в лог. Так что подход с html наверно будет менее удобным. Ок, попробую применить панель виртуализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:38 |
|
WPF: Торможение потокового документа
|
|||
---|---|---|---|
#18+
Алексей КShocker.ProИли же надо плюнуть и использовать какой-нибудь ListBox с виртуализацией?Да, в WPF визуальное дерево очень прожорливое. Где-то была инфа, что отображение кода в редакторе кода Студии (в 2010, чтоли) - это потоковый документ, где весь код - span'ы, run'ы и прочие элементы этого потокового документа. И как они умудрились? А в 2012 - всё переписано на самописное, вроде. Вот визуальное дерево в Студии 2012 - пока добрался до отрисовки кода, задолбался в Snoop'е дерево раскрывать. Какие-то рендеренные линии - каждая линия отдельно рендерится. Причём нумерация строк кода - тоже отдельный элемент. При такой охрененной вложенности элементов - удивляюсь, как у них ничего не тормозит в этой Студии. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2015, 22:04 |
|
WPF: Торможение потокового документа
|
|||
---|---|---|---|
#18+
Я как-то пару лет назад задавал в MSDN вопрос - почему при добавлении String'ов в ListBox в визауальном дереве есть ListBoxItem, но свойствао SelectedItem возвращает String. Как видно из моего текста, самый быстрый способ - использовать ItemsSource. Тогда названия файлов быстро добавляются. Но тогда я получу String. А чтобы получить ListBoxItem, я должен явно создавать ListBoxItem, но тогда прога начинает тормозить. Вот в чём и бред - во всех трёх описанных мною способах добавления в визуальном дереве - ListBoxItem, но SelectedItem всё же возвращает разные результаты. :( ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2015, 15:25 |
|
WPF: Торможение потокового документа
|
|||
---|---|---|---|
#18+
Smith27, дело в том, что сделать Visual объект в виде строки проще пареной репки, а по ресурсам это будет на много дешевле. везде говорится, хотите производительности в WPF, переходите на Visual, с FrameworkElements. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2015, 19:46 |
|
|
start [/forum/topic.php?fid=21&msg=39115361&tid=1440767]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
3ms |
others: | 11ms |
total: | 259ms |
0 / 0 |