Events F#事件过滤器的性能成本/收益

Events F#事件过滤器的性能成本/收益,events,f#,Events,F#,在编写F#Windows窗体应用程序时,我发现了F#的Event.Filter函数,我想进一步了解它。 我所做的是转换现有代码: MyControl.MouseMove.Add( fun args -> if (args.Button = MouseButton.Left && args.X > 10 && args.Y > 10) then // do something 致: 我发现Event.Filter解决方案非常优雅,

在编写F#Windows窗体应用程序时,我发现了F#的Event.Filter函数,我想进一步了解它。 我所做的是转换现有代码:

MyControl.MouseMove.Add( fun args ->
    if (args.Button = MouseButton.Left && args.X > 10 && args.Y > 10)
    then // do something
致:

我发现Event.Filter解决方案非常优雅,所以我想知道它是否只是一种语法糖,或者它与“引擎盖下”的工作方式有什么不同。

看看,您的两个代码示例所做的几乎完全相同。唯一的额外开销是通过
过滤器创建额外的
事件


在我看来,由于性能原因而不使用
过滤器将是一种过度优化。

好的,我怀疑它或多或少是以这种方式实现的,但我希望有一种更复杂的机制。我同意你的看法,事实上Event.filter函数的使用更具可读性和即时性。
MyControl.MouseMove
|> Event.filter ( fun args -> 
    (args.Button = MouseButtons.Left && args.X > 10 && args.Y > 10))
|> Event.add ( // do something)