2017-02-15 4 views
0

List<Point>には約500ポイントが含まれています。これらの点はパスとして描かれるはずです。しかし、しばらくの間、私は "ポイントのみ"モードに切り替えることができる必要があります。これは、連続したラインではなく、ラインが基づいているポイントだけを表示します。ドットのリストを描画する実行方法(パスではなく)

非常にパフォーマンスではありませんItemsControlを使用して簡単な解決策が見つかった場合:Path -objectを使用して私のラインを描画するときに、パフォーマンスがはるかに優れている(それは連続パスではなく、単一のドットだ

<ItemsControl ItemsSource="{Binding Line}"> 
    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="FrameworkElement"> 
      <Setter Property="Canvas.Left" Value="{Binding X}" /> 
      <Setter Property="Canvas.Top" Value="{Binding Y}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate DataType="Point"> 
       <Ellipse Fill="GreenYellow" Width="2" Height="2" Margin="-1,-1,1,1"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas IsItemsHost="True" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

を):

<Path Data="{Binding Path=Line, Converter={StaticResource ResourceKey=PointsToPath}}" 
     Stroke="GreenYellow" 
     StrokeThickness="2"/> 

私の行のポイントを描画するときに同じ(または少なくとも似たような)パフォーマンスを達成する方法はありますか?描画されたドットは、今のところ一定の形状やサイズにする必要はありません。

Most performant way to graph thousands of data points with WPF?この質問が見つかった場合、彼らは最大100000点を話しています - 私はより簡単な方法を見つけることを願っています私は私の場合、より少ないポイントで対処しているからです。

私はただ、関心の外に少なくとも15 FPS

+0

は 'allowTransparency'を有効にしていますか? –

+0

あまりにも多くの可能性があります。特に、あなたがすでに試したことを示す[mcve]がないことが挙げられます。あなたが見つけた質問には、実際にはいくつかのオプションが含まれています。あなたは "より簡単な方法"を望んでいますが、それらのいくつかの回答のうちどれと比較していますか?いくつかは私に悪いように見えません。他のオプションとしては、 'DrawingVisual'を使うこと、オブジェクトのコンテキストに直接レンダリングすること、または独自の' Drawing'を組み込むことなどがあります。質問を絞り、改善してください。 –

+0

私はそれを試してみましたが、もし私が50000を持っていても、読み込まれたときには遅れがあります。一度描けばすべてがスムーズです。あなたが毎秒新しいポイントをロードしていない場合、私はあなたが減速が他の場所にあると思う。 –

答えて

1

でできるだけ対話形式としてスムーズに描かれたそれらの点が矩形にあなたの楕円を変更してみてください持っている必要があります。これらのサイズでは、丸みのあるエッジは表示されず、四角形を描画するのが速くなります。また、ポイントは、あなたのワンタイム

に結合EDIT変更移動しない場合は:今、あなたは、これは私がマイクのコメントをエコーう一度ドロー15fpsのではなく、更新する必要があることを追加したことを

[OK]をバインディングをバイパスし、キャンバスのコントロールを持つだけです。すべての四角形を使用して子を「ロード」した後、秒間にX回タイマーループを使用してcanvas.leftおよびcanvas.topプロパティを直接変更します。

+0

'Ellipse'を' Rectangle'に変更すると、実際にはパフォーマンスは向上しますが、ほんの少しです。裏側では、楕円はその小さなスケールでさえ滑らかに見えます。 – DIF

関連する問題