0 people like it.

Tuple Performance

 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
#time "on"
module Tupled =
    let foo (f : int * int -> int) = 
        f (1, 2)

    let bar (a : int, b : int) =
        a + b

    let test () =
        let mutable x = 0
        for i in 1 .. 2000000000 do
            x <- x + foo bar
        printfn "%A" x
        
    test ()


#time "on"
module Curried =
    let foo (f : int -> int -> int) = 
        f 1 2

    let bar (a : int) (b : int) =
        a + b

    let test () =
        let mutable x = 0
        for i in 1 .. 2000000000 do
            x <- x + foo bar
        printfn "%A" x
        
    test ()


#time "on"
// Not the same but notice the amount of gen0 GC's
module TupledReturn =
    let foo (f : int -> int -> int * int) = 
        f 1 2

    let bar (a : int) (b : int) =
        a, b

    let test () =
        let mutable x = 1, 2
        for i in 1 .. 2000000000 do
            x <- foo bar
        printfn "%A" x
        
    test ()
val foo : f:(int * int -> int) -> int

Full name: Script.Tupled.foo
val f : (int * int -> int)
Multiple items
val int : value:'T -> int (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.int

--------------------
type int = int32

Full name: Microsoft.FSharp.Core.int

--------------------
type int<'Measure> = int

Full name: Microsoft.FSharp.Core.int<_>
val bar : a:int * b:int -> int

Full name: Script.Tupled.bar
val a : int
val b : int
val test : unit -> unit

Full name: Script.Tupled.test
val mutable x : int
val i : int32
val printfn : format:Printf.TextWriterFormat<'T> -> 'T

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn
val foo : f:(int -> int -> int) -> int

Full name: Script.Curried.foo
val f : (int -> int -> int)
val bar : a:int -> b:int -> int

Full name: Script.Curried.bar
val test : unit -> unit

Full name: Script.Curried.test
module TupledReturn

from Script
val foo : f:(int -> int -> int * int) -> int * int

Full name: Script.TupledReturn.foo
val f : (int -> int -> int * int)
val bar : a:int -> b:int -> int * int

Full name: Script.TupledReturn.bar
val test : unit -> unit

Full name: Script.TupledReturn.test
val mutable x : int * int
Raw view Test code New version

More information

Link:http://fssnip.net/5B
Posted:15 years ago
Author:
Tags: