F#Event.Filter的性能成本/收益

时间:2013-02-05 20:55:23

标签: 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

到:

MyControl.MouseMove
|> Event.filter ( fun args -> 
    (args.Button = MouseButtons.Left && args.X > 10 && args.Y > 10))
|> Event.add ( // do something)

我发现Event.Filter解决方案非常优雅,所以我想知道它是否只是一种语法糖,或者它是如何在“引擎盖下”工作的区别。

1 个答案:

答案 0 :(得分:2)

查看source,您可以看到您的两个代码示例几乎完全相同。唯一的额外开销是Event创建额外的filter

在我看来,由于性能而未使用filter将是一种过度优化。