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.Line
和 Chart.Points
对于大量的点来说相当慢。该库还有 Chart.FastLine
和 Chart.FastPoints
(它们不支持尽可能多的功能,但速度更快)。因此,请尝试获取最新版本的 F# Charting 并使用该方法的 "Fast" 版本。
我使用类似下面示例的代码对 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.Line
和 Chart.Points
对于大量的点来说相当慢。该库还有 Chart.FastLine
和 Chart.FastPoints
(它们不支持尽可能多的功能,但速度更快)。因此,请尝试获取最新版本的 F# Charting 并使用该方法的 "Fast" 版本。