Comment tracer une ligne de dizaine de milliers de points avec WPF dans un délai de 0,5 seconde?
Je suis en train d'écrire WPF le code pour afficher en temps réel de la parcelle qui est connecté en ligne de contenant environ
10 000 points. Il faut environ 5 secondes pour afficher une photo dans mon ordinateur. Quelqu'un a une idée pour la rendre plus rapide et moins de 0,5 seconde?
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);
}
- Charles est juste les points, si vous avez besoin de l'lignes, utilisez la même méthode, cela fonctionnera très bien. Vous avez à tirer parti de la conservés du système graphique.
Vous devez vous connecter pour publier un commentaire.
Charles Petzold est exactement ce que fait. Il est encore plus rapide sur mon hôte, (< 0.3 secondes), et le point sont encore liées aux données!! 😉
Tamir Khason cela, avec des lignes et va plus en profondeur dans le Bitmap de style de performance WPF ici.
Rico Mariani a quelques conseils pour 3D de hautes performances graphiques, essentiellement d'exploiter les différents types de valeurs peuvent améliorer votre capacité de production, si bien pensé.
Zhang Jianzhong donne mon nouveau favourate tutoriels sur ce sujet, 3D diagramme de dispersion de plusieurs dizaines de milliers de points de données animé et interactif.
Je suppose que l'exemple de code est 1) un test à essayer quelque chose qui n'est pas vraiment l'échantillon ou 2) des devoirs à faire.
Essayer de remplacer la OnRender et faire quelque chose comme:
ou pour quelque chose avec des données réelles, pensez à vérifier si vous avez vraiment besoin de montrer chaque point en fonction de la résolution du contexte visuel. ( Si votre échelle est de 0 à 10 et vous produisez des points de 0,0001,0.00015 sont-ils vraiment disparu diffèrent sur votre échelle)
Devrait les lignes être sélectionnable? Vous pouvez dessiner des lignes dans l'image, puis de lui donner comme source de contrôle de l'Image. Cela permettra d'attirer plus rapide, mais vous allez perdre la capacité à interagir avec des lignes.
Avez-vous envisagé de XNA? À l'aide d'une carte graphique va accélérer les choses.
Monogame, basé sur XNA, est vivant. Vous pouvez utiliser son pouvoir pour résoudre certaines tâches spéciales nécessitant d'énormes performances graphiques et même injecter ses fenêtres en WPF GUI.