2010-10-25 13 views
3

Я работаю над диагностическим инструментом и получаю данные каждые 25 мс. Мне нужны эти данные для рисования в моей диаграмме с помощью lineSeries. Я использую диаграмму wpf с линией, которую я связываю в xaml с ObservebleCollection.График WPF в реальном времени .Net 4

Проблема в том, что мне нужно, чтобы коллекция содержала по крайней мере 1600 точек данных, прежде чем начинать снимать их спереди.

Я понимаю, что 25 мс - это короткий тим, тогда дело доходит до рисования в wpf. Доза у кого-нибудь есть решение моей проблемы?

С уважением

+0

Как основатель Gigasoft, научно-исследовательские и сравнить, мы предлагаем не хлопот 18 мег мало [МОФ графиков демо] (http://www.gigasoft.com). Пример 123 реального времени отображает 12M точек аудио-данных wav с аннотациями (масштабирование, панорамирование, все время обновления), например, adobe audition или nero wave editor с несколькими строками кода. В режиме реального времени пример 115 отображает 400 тыс. Точек непрерывно, как осциллограф. Пример 138 в режиме реального времени 138 точек 8М показывает использование динамических буферов, поэтому можно поддерживать и обновлять большой объем данных, не опасаясь замедления, поскольку данные с течением времени добавляются. Демо также поставляется с WinForm и MFC exes. – Robert

ответ

2

Я предлагаю вам использовать заказ рисунка рутинный с использованием WritebleBitmap вместо формы и нарисовать свои линии в фиксированной области одного сегмента в то время, без какой-либо прокрутки. Когда вы достигнете 1600 пунктов в правой части участка, начните сначала. Возможно, какой-то визуальный индикатор (например, вертикальная линия или что-то еще) поможет восприятию.

Я не думаю, что существуют графические библиотеки, предназначенные для обновления 1600-точечной линии каждые 25 мс.

+0

Okey, спасибо. Я дам ему попробовать. – lindberg00

+1

Writeablebitmap работает хорошо, но имеет недостатки. У вас нет линий переменной толщины, а производительность заполнения плохая. Это быстрее, чем стандартный WPF, но остается в пыли компонентами licke arction LightningChart, который использует SlimDX/DirectX для всего рендеринга – bradgonesurfing

3

У меня есть приложение .NET, которое отображает множество измерений в интервале 33 мс. Я проверил ряд графических решений для выполнения этой задачи, но единственным реальным вариантом, который я нашел, был Arction LightningChart (http://www.arction.com). Lightning Chart сделает то, что вы хотите довольно легко, и я думаю, что вы можете получить базовую версию бесплатно. Недостатком будет зависимость от DirectX и библиотеки SlimDX. Испытание, которое вы можете загрузить с сайта, даст вам довольно хорошие примеры того, как использовать этот элемент управления в WPF и Windows Forms.

+0

Хороший ввод, LC больше не имеет зависимости SlimDX в новейших версиях. –

3

Вы должны проверить SciChart, который может обрабатывать обновления данных на расстоянии 1 мс. Он отображает как игровой цикл, поэтому только рисует, когда добавляются новые данные, а поток пользовательского интерфейса свободен. Некоторые онлайн-демонстрации на www.scichart.com/demo, которые демонстрируют производительность.

Раскрытие информации: Это мой собственный компонент, поэтому задавайте любые вопросы, если они у вас есть!

0

Используйте Microsoft Chart для WinForms, используя элемент управления WindowsFormsHost. MS-Chart может хорошо обрабатывать такие скорости передачи данных. Он внутренне использует метод WritableBitmap, поэтому он является быстрым и стабильным. Кроме того, не забудьте установить тип серии в FastLine, чтобы избежать замедления.

Я создал статью «Совет» для codeproject, которая пытается выделить этот тип использования больших объемов данных на MS-Chart. Вы можете изменить интервал таймера до 1 мс. и убедитесь, что нет необходимости показывать данные.

В статье на http://www.codeproject.com/Tips/1006180/Using-Microsoft-Chart-in-WPF

Смежные вопросы