winforms - FSharpChart 与 Windows.Forms 在很多方面都非常慢

标签 winforms f# f#-interactive fsi fsharpchart

我使用如下例所示的代码对 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 并使用该方法的“快速”版本。

关于winforms - FSharpChart 与 Windows.Forms 在很多方面都非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194547/

相关文章:

f# - 类似于 F# 中的 yield break

f# - 在 F# 中切片二维数组但类似于 Matlab?

.net - WinForms:在运行时从Label更改字体样式(下划线)的正确方法是什么?

c# - 单击项目时,如何删除包裹 listBox1 中所选项目的蓝色?

charts - 对于此 Fsharp Charting Livechart 示例,为什么未设置引用?

f# - 如何编写中缀函数

c# - 这个 ListBox 的枚举器在哪里被循环修改?

c# - MVP 三元组之间的通信

f# - 嵌入 F# 交互式示例从 FSharp.Compiler.Service 抛出异常

winforms - 是否可以在不显示控制台窗口的情况下运行 f# 脚本?