Verschachtelte Funktionen werden vom Compiler in Klassen extrahiert, die von FSharpFunc
erben, verschachtelt innerhalb des Moduls oder des Typs, in dem ihre Elternfunktion definiert ist. Der Compiler macht also im Wesentlichen für Sie das, was Sie andernfalls mit externem privat tun würden Funktionen.
Zur Laufzeit geschieht nur die Instanziierung dieser Objekte. Im Vergleich zum Ausführen von Inline-Code sind die Kosten höher, aber ich nehme an, dass sie drastisch unter dem liegen, was Sie in Ihrem mentalen Modell erwartet haben.
Es bleibt jedoch ein zusätzliches Objekt für GC. Wäre diese Objekt-Instanziierung dann in einer engen Schleife von Bedeutung? In einer naiven Implementierung, bei der das Funktionsobjekt in jeder Iteration neu instanziiert wird, vielleicht ja. Der F # -Compiler ist jedoch schlauer und instantiiert typischerweise die Funktionen, die einmal außerhalb der Schleife im Schleifenkörper verwendet werden. Also wieder, die Kosten sind wahrscheinlich so niedrig wie es sein kann.
Im Zweifelsfall wenden Sie sich an ILSpy und Benchmark. Als Faustregel gilt: Sorgen Sie nicht darüber und verwenden Sie nur verschachtelte Funktionen.
Maybe - Benchmark und siehe –
Von Interesse: [F # interaktive # Zeit] (https://docs.microsoft.com/en-us/dotnet/articles/fsharp/tutorials/fsharp-interactive/) - [Beispiel] (https://github.com/jack-pappas/fsharp-logic-examples/blob/d78b170ecfd7526971153e2f2a27446e0c51dd6e/Examples/dp.fsx#L41) –