Visual Studio | WPF > グラフ > LiveCharts > 折れ線グラフ描画のパフォーマンス > 1000点: zoomingとpanningが重い | 1万点: 表示されない

```txt:動作環境
Windows 8.1 Pro (64bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

### 関連

[c++ builder > TeeChart > 1つのグラフ:データ数20万件で固まる / 複数のグラフ: トータルデータ数20万件で固まる](https://qiita.com/7of9/items/348c23e4ade4afe872f8)

C++ Builderでは20万件でのデータポイントでグラフが固まった。
WPF+LiveChartsではどうか。

```txt:動作環境
Windows 8.1 pro (64bit)
Core i7-6700 3.40GHz
4.0GB RAM
```

### code

```MainWindow.xaml
<Window x:Class="_171127_t1200_tooManyPoints.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_171127_t1200_tooManyPoints"
        xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <lvc:CartesianChart Series="{Binding seriesCollection}" Height="250"
                                LegendLocation="Right"
                                Zoom="Xy"/>
        </StackPanel>
    </Grid>
</Window>
```

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
// 以下を追加した
using LiveCharts;
using LiveCharts.Wpf;

namespace _171127_t1200_tooManyPoints
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            graph_init();
        }

        private void graph_init()
        {
            gd = new GraphData();

            var sc = new SeriesCollection {
                new LineSeries
                {
                    Title = "napier",
                    Values = new ChartValues<double> { 2, 7, 1, 8, 2, 8, 1, 8 }                    
                }
            };

            graph_add_series(sc);
            gd.seriesCollection = sc;
            this.DataContext = gd;
        }

        static readonly int kNumPoint = 1000; /****************************/

        private void graph_add_series(SeriesCollection sc)
        {
            var lnsr1 = new LineSeries();
            lnsr1.Title = "pi";
            lnsr1.Values = new ChartValues<double> { };
            lnsr1.Fill = Brushes.Transparent;
            lnsr1.PointGeometry = null;
            //
            var gen = new System.Random();
            for (int idx = 0; idx < kNumPoint; idx++)
            {
                var tmp = gen.NextDouble() * 10.0;
                lnsr1.Values.Add(tmp);
            }
            sc.Add(lnsr1);
        }

        GraphData gd;
        public class GraphData
        {
            public SeriesCollection seriesCollection { get; set; }
        }
    }
}
```

## 結果

### 1000点

描画はされる。
zoomingやpanningの動作が重く感じる。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/7ce3a06c-a037-0d28-0765-be647f8bc975.png)

### 1万点

30秒程度待ったが描画される気配はない。

最適な描画方法は別途あるのだろうか。

[30 Series 10k points each](https://lvcharts.net/App/examples/v1/wpf/30%20Series%2010k%20pts%20each)
を見ると、もっと軽快な感じではないかと思うが何が違うのだろうか。
Geared(68.9 USD)を使わないと無理なのだろうか。

https://lvcharts.net/licensing/pricing
> and plot millions of points in practically no time,

30 Series 10k points eachでは下記の処理で描画点数を減らしているように思う。

```
Values = values.AsGearedValues().WithQuality(Quality.Low)
```

### パフォーマンスチューニング

[Improve Performance](https://lvcharts.net/App/examples/v1/wf/Performance%20Tips)