2013-02-05 65 views
2

編寫一個F#Windows窗體應用程序我發現了F#的Event.Filter函數,我想了解更多信息。 我所做的就是將我現有的代碼: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真正優雅的,所以我想知道,如果它只是一種語法糖,或者是事物如何在「引擎蓋下」工作的差異。

回答

2

看看source,你可以看到你的兩個代碼樣本幾乎完全一樣。唯一額外的開銷是通過filter創建額外的Event

由於性能不會使用filter在我看來是過度優化。

+0

好吧,我懷疑它或多或少地以這種方式實現,但我希望有一個更復雜的機制。我同意你的觀點,事實上Event.filter函數的使用更具可讀性和直接性。 –