我使用下面的示例代码来对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
答案 0 :(得分:4)
首先,FSharpChart
是旧版本库中使用的名称。最新版本称为F# Charting,附带新文档,仅使用Chart
。
要回答您的问题,Chart.Line
和Chart.Points
对于大量积分来说非常慢。该库还具有Chart.FastLine
和Chart.FastPoints
(不支持尽可能多的功能,但速度更快)。因此,尝试获取最新版本的F#Charting并使用该方法的“快速”版本。