Windows.Forms 的 FSharpChart 对于很多点来说非常慢

FSharpChart with Windows.Forms very slow for many points

我使用类似下面示例的代码对 F# Interactive 中的值列表进行基本绘图。当绘制更多点时,显示所需的时间会急剧增加。在下面的示例中,10^4 点在 4 秒内显示,而 4.10^4 点需要耐心测试 53 秒才能显示。总的来说,绘制N个点的时间大概在N^2。

结果是我可能会在这段代码前面加一个插值层,但是

1) 我想知道是否有人知道 FSharpChart 和 Windows.Forms 的工作原理可以解释是什么导致了这种行为? (数据有限,所以似乎排除了显示需要调整比例的一件事。)

2)除了自己插值外,还有什么简单的补救措施吗?

let plotl (f:float list) =
    let chart = FSharpChart.Line(f, Name = "")
            |> FSharpChart.WithSeries.Style(Color = System.Drawing.Color.Red, BorderWidth = 2)
    let form = new Form(Visible = true, TopMost = true, Width = 700, Height = 500)
    let ctl = new ChartControl(chart, Dock = DockStyle.Fill)
    form.Controls.Add(ctl)

let z1 = [for i in 1 .. 10000 do yield sin(float(i * i))]
let z2 = [for i in 1 .. 20000 do yield sin(float(i * i))]
plotl z1
plotl z2

首先,FSharpChart是旧版本库中使用的名称。最新版本称为 F# Charting,附带新文档并仅使用 Chart.

为了回答你的问题,Chart.LineChart.Points 对于大量的点来说相当慢。该库还有 Chart.FastLineChart.FastPoints(它们不支持尽可能多的功能,但速度更快)。因此,请尝试获取最新版本的 F# Charting 并使用该方法的 "Fast" 版本。