【问题标题】:FSharpChart with Windows.Forms very slow for many points带有 Windows.Forms 的 FSharpChart 在很多方面都非常慢
【发布时间】:2015-03-22 12:48:24
【问题描述】:

我使用下面示例中的代码对 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

【问题讨论】:

  • 它在技术上是一个 O(n) 算法,但现代处理器有 4 个不同的 Ohs。数据集越大,数据适合处理器缓存的几率就越低。当它来自非常慢的 RAM 时,它真的会坦克。只收集较少的数据是一种解决方法,40K 点远远超过绘制准确图表所需的。

标签: winforms f# f#-interactive fsi fsharpchart


【解决方案1】:

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

要回答您的问题,Chart.LineChart.Points 对于大量积分来说非常慢。该库还具有Chart.FastLineChart.FastPoints(它们不支持那么多功能,但速度更快)。因此,请尝试获取最新版本的 F# Charting 并使用“快速”版本的方法。

【讨论】:

  • 我刚刚安装了 F# Charting 库,但是我对 WIndows.Forms 的小管道现在被以下消息破坏:“类型 'FSharp.Charting.ChartTypes.GenericChart' 与键入'MSDN.FSharp.Charting.ChartTypes.GenericChart'"。解决方案是否遵循 F# Charting 网站上有关 WPF 应用程序的说明(此处:fsharp.github.io/FSharp.Charting/UsingChartsInWPF.html)?
  • 好的,只是需要注意各种参考资料,请参阅this answer。接受您的回答:使用 FastLIne,我能够(认为我)在短时间内显示荒谬的点数。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 2013-04-18
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多