visual vectores una plano net matriz lineas graficar esfera dibujar cómo cartesiano c# wpf performance templates itemscontrol

vectores - plano cartesiano c#



¿Cómo dibujar una línea de diez miles de puntos con WPF en 0,5 segundos? (5)

Estoy escribiendo el código WPF para mostrar una gráfica en tiempo real que es una línea conectada que contiene aproximadamente 10,000 puntos. Se tarda unos 5 segundos en mostrar una imagen en mi computadora. ¿Alguien tiene una idea para hacerlo más rápido y dentro de 0,5 segundos?

class eee : FrameworkElement { public eee() { _children = new VisualCollection(this); Random rand = new Random(); DrawingVisual dv = new DrawingVisual(); using (DrawingContext dx = dv.RenderOpen()) { Pen drawingPen = new Pen(Brushes.Black, 1); double x=rand.Next(300); double y = rand.Next(300); for (double i = 0; i < 1000; i = i + 0.1) { y = 100 + rand.Next(100); dx.DrawLine(drawingPen, new Point(i, x), new Point(i + 1, y)); x = y; } } _children.Add(dv); }


¿Has considerado XNA ? Usar una tarjeta gráfica acelerará las cosas.


¿Las líneas deberían ser seleccionables? Puede dibujar líneas en la imagen y luego asignarla como fuente al control de imagen. Se dibujará más rápido, pero perderá la capacidad de interactuar con las líneas.


Supongo que la muestra de código es 1) una prueba para probar algo que no es realmente la muestra o 2) una tarea.

Intenta anular el OnRender y haz algo como:

Pen drawingPen = new Pen(Brushes.Black, 1); protected override void OnRender(DrawingContext dc) { dc.DrawRectangle(Background, null, new Rect(RenderSize)); double x=rand.Next(300); double y = rand.Next(300); for (double i = 0; i < 1000; i = i + 0.1) { y = 100 + rand.Next(100); dc.DrawLine(drawingPen, new Point(i, x), new Point(i + 1, y)); x = y; } }

o para algo con datos reales, considere si realmente necesita mostrar cada punto dependiendo de la resolución del contexto visual. (Si su escala es 0-10 y está generando puntos 0.0001,0.00015, ¿son realmente diferentes en su escala?)


Charles Petzold hace exactamente eso. Es incluso más rápido en mi host (<0,3 segundos), ¡y los puntos son incluso DataBound! ;)

Tamir Khason hace esto también, con líneas y profundiza en el rendimiento de estilo de mapa de bits WPF here .

Rico Mariani tiene algunas pautas para gráficos de alto rendimiento en 3D, esencialmente aprovechando los tipos de valor que pueden mejorar su rendimiento si están bien pensados.

Jianzhong Zhang ofrece mis nuevos tutoriales favoritos sobre este tema, un gráfico de dispersión en 3D de varias decenas de miles de datos animados e interactivos.


Monogame , basado en XNA, está vivo. Puede usar su poder para resolver algunas tareas especiales que requieren un gran rendimiento gráfico e incluso inyectar sus ventanas en la GUI de WPF.