Events F#事件过滤器的性能成本/收益
在编写F#Windows窗体应用程序时,我发现了F#的Event.Filter函数,我想进一步了解它。 我所做的是转换现有代码: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解决方案非常优雅,
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)