Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160

Стандартные средства построения диаграмм в C# начинают виснуть после 1000 точек

01.08.2013, 15:14. Показов 3944. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. В общем у меня есть основные диаграммы, но только одна отображается на экране. Эта диаграмма заполняется не быстрее 1 секунды. Диаграмму можно растягивать или фиксировать её интервал представления (Например между 600 и 700 точками). По оси х - у меня время в секундах, по у - само собой свои данные.
К тому же есть функция фиксации, в котором представляется возможность рассматривать таблицу в режиме паузы детально, но главная диаграмма всё равно заполняется.
Я бы не писал всего этого, т.к. это мало кого волнует, и по существу маловажно. Но вдруг где-то тут ключевая зацепка.

В итоге у меня это дело начинает виснуть после 700 точек. Где-то слышал, что используя сторонние компоненты построения диаграмм, добивались ажжжжж 16000... Я не знаю как быть. Пробовал с Invalidate(). Может я что-то не так делаю? Виснуть начинает всё предельно прогрессируя к сдвижению. При этом пробовал отключать всякие встроенные функции типа сглаживания и тп. Комп нагружается не сильно, но при фиксации и просмотре этого чуда, он нагружается довольно ощутимо.

Подскажите, пожалуйста, может есть какой-то способ не удаляя старые точки, т.к. нужна история, прибегнуть к лучшей производительности? А если и нет, то подскажите другие компоненты. И если возможно ссылку. Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2013, 15:14
Ответы с готовыми решениями:

Графические средства построения множества точек, вектора, прямой (на одном рисунке)
Собственно вопрос в том какими средствами на одном рисунке (координатная плоскость) отобразить множество точек, вектор(ы) (или хотя бы...

Стандартные средства логгирования
Вот такой каверзный вопрос у меня затесался. Сам я далек от администрированияю, но вот появился такой какие есть стандартные средства...

Стандартные средства диагностики производительности
Здравствуйте! Задали написать реферат на тему: Стандартные средства диагностики производительности операционной системы windows xp (vista,...

23
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
01.08.2013, 17:14
Не думаю, что сторонние компоненты работают быстрее стандартных... В coolite у меня вываливалось исключение при построении графика более двухсот точек(по-моему)
1
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
01.08.2013, 20:07  [ТС]
Очень жаль, но нужно каким-либо способом это исправить. Вплоть до покупки платной версии. Вы что-нибудь слышали о платных решениях?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.08.2013, 01:33
sptes, каким компонентом пользуетесь?
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
02.08.2013, 08:01  [ТС]
стандартным CHART
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.08.2013, 09:23
sptes, 1) а точки вам очень нужны или нужна только кривая
2) WinForm или WPF?
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
02.08.2013, 09:33  [ТС]
Psilon, 1) Точки очень нужны. Каждая из точек. В том-то и дело, ведь иначе можно было бы обрезать одинаковые точки в последовательности.
2)winform.

Как быть, не знаете?
0
39 / 37 / 8
Регистрация: 01.08.2013
Сообщений: 106
02.08.2013, 09:53
Знакомая задачка, в университете на КГ, что то такое было
Решалось так - построение объекта производилось полигоном, добавление точки, изменение точки - операция "добавление" \ "вычитание". Точки хранились в стороннем массиве. На полигоне точке обозначались спец цветом. Ивент на мыше проверял цвет нажатия, если "спец" цвет - лез в массив точек. На стрессоустойчивости доводил автоматической функцией количество точек до миллиона, всё практически летало )
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
02.08.2013, 10:04  [ТС]
Кхм, вы имеете ввиду, что на экране демонстрируется лишь выделенная область из диапазона точек? А как тогда быть с прокруткой? Я Вас правильно понял?
0
39 / 37 / 8
Регистрация: 01.08.2013
Сообщений: 106
02.08.2013, 10:41
С прокруткой не пробовал, но думаю проблем не должно возникнуть: прокрутка это смещение оси координат в целом, просто объект (полигон) будет иметь сдвиг относительно экрана. Суть в том, что бы не хранить графические точки, а хранить только полигон, построенный по этим точкам, меньше требуется времени и ресурсов. Т.е. фактически необходимо написать свой движок, для построения диаграмм. В универе немного отличалась задача, строились два и более объекта по "натыканным" на экране точкам, затем эти объекты свободно перемещались и к ним могли применяться операции ТМО (сложение, вычитание, xor ...).
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
02.08.2013, 11:23  [ТС]
Ясно, спасибо. Попробую, потом отпишусь)

Добавлено через 26 минут
А примера у вас не сохранилось?) Я бы с удовольствием посмотрел на него)
0
39 / 37 / 8
Регистрация: 01.08.2013
Сообщений: 106
02.08.2013, 11:49
Поищу, когда буду дома.
1
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
02.08.2013, 14:04  [ТС]
onicdr, спасибо Вам

Добавлено через 2 часа 10 минут
onicdr, Можете помочь по теме? В общем я буду ждать ваш пример. У меня сейчас работает это дело от таймера, но таймер работает в главном потоке. При зависании, таймер тоже начинает зависать. Пробовал перенести присвоение значений в другой поток, но я не знаю каким образом добавлять в диаграмму значения кроме как вписывать вручную.
chart.Series[0].Points.AddXY(valueX,valueY);
Как можно иначе записывать значения? Чтобы потоки не конфликтовали с объектом, а главный поток отрисовывал только диаграмму?

Для DataPointCollection нельзя создать экземпляр класса.
0
39 / 37 / 8
Регистрация: 01.08.2013
Сообщений: 106
02.08.2013, 14:59
Можно попробовать передавать целиком Series (удалять имеющийся в chart и добавлять новый принятый). Но не уверен, на сколько это разумно и быстро будет, надо пробовать.
Добавление в имеющийся Series через Invoke еще можно попробовать, но она фактически будет добавляться в основном потоке, так что тоже не имеет смысла.
1
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
02.08.2013, 15:35  [ТС]
Работает, но нюансов ещё больше выходит. По-другому, как сериализацией же не копировать объект. А если его не копировать, например в память, то никак иначе нельзя получить копию. Если же работать с ссылкой, то неминуемо приведёт к конфликту потоков. Я думаю есть же другой способ). Более гуманный. Диаграмма моргает, после диаграмма не может измениться, ибо она копируется с другой диаграммы, а если менять все свойства на ту диаграмму (фиксация, заполнение, сжатие - функции в моей программы для работы с диаграммой), то это всё переписывать.

Я пробовал сделать с массивом int X и Y, а ещё position. В итоге каждый раз программ будет в цикле смотреть на текущую позицию и добавлять необходимый диапазон из массива.
что-то типа
C#
1
2
3
4
5
int index=0;
for(index=graphic_chart[graphic_index].Series[0].Points.Count; index<position[graphic_index];index++)
{
    graphic_chart[graphic_index].Series[0].Points.AdDXY(X[index],Y[index]);
}
Но опять же, как оно себя поведёт?

Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int[] X = new int[2,000,000];
int[] Y = new int[2000000];
int position=0;
 
//
... Отдельный поток
X[position]=valueX;
Y[position]=valueY;
position++;
//
int index=0;
for(index=chart.Series[0].Points.Count; index<position;index++)
{
    chart.Series[0].Points.AdDXY(X[index],Y[index]);
}
0
39 / 37 / 8
Регистрация: 01.08.2013
Сообщений: 106
02.08.2013, 15:38
В принципе, если дело только в подвисании, то можно добавить строку Application.DoEvents() внутри цикла и делать в одном потоке всё, но нужно учесть - это снизит скорость добавления.
1
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
02.08.2013, 15:47  [ТС]
Так, а что это такое?))

P.s. Ех, мне нужно и контролировать точки в строгой последовательности обновления, и отрисовывать их в строгой последовательности. (
0
39 / 37 / 8
Регистрация: 01.08.2013
Сообщений: 106
02.08.2013, 15:58
Простенький пример действия Application.DoEvents():
Если написать прогу с 1 кнопкой и действием внутри кнопки типа:
Code
1
2
3
while (true)
{
}
и нажать на эту кнопку - форма просто повиснет.
А вот если так:
Code
1
2
3
4
while (true)
{
Application.DoEvents();
}
То форма не в подвешенном состоянии.
Т.е. добавить надо 1 строку в цикл и всё будет ок)
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
02.08.2013, 16:02  [ТС]
Ух ты, она даже в другом потоке работает без захвата объекта. Классная вещь. Надо будет дома почитать об этом. Спасибо Вам всё равно большое. Если дома найдёте старый проект, то будет вообще замечательно.
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
03.08.2013, 09:06  [ТС]
Хорошо. Главное, что теперь время в такт с графиком идёт. Это просто замечательно)

Добавлено через 16 часов 51 минуту
А разве chart нельзя отдать на выполнение видеокарте? Ну не знаю, как-то неразумно же использовать ресурсы процессора для построение графических элементов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2013, 09:06
Помогаю со студенческими работами здесь

Стандартные средства генерации отчетов JavaFX
Здравствуйте, подскажите, имеются ли в Java/JavaFX стандартные средства генерации отчетов?

Стандартные средства для генерации комбинаций
Возник вопрос нет ли каких то стандартных средств для следующего: def forever(c): while True: for i in range(len(c)): ...

Стандартные средства в лучшей CMS Joomla
Здравствуйте. Есть вопрос- нужна на главной странице сайта выводить новости. То есть превью. Что бы выводилось половина текста статьи и...

Мастер построения диаграмм. ( С# )
Мастер построения диаграмм. ( С# ) На вкладках мастера задаются исходные данные, типа диаграммы ( столбчатая, круговая, пузырьковая,...

Программа построения диаграмм
Всем доброго времени суток, прошу помочь срочно нужна программа в дельфи построение диаграмм


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru