|
1 |
| -let NUM_RECORDS = 50 * 1000 * 444 |
| 1 | +open System.Diagnostics |
2 | 2 |
|
3 |
| -type FSMemTrade = { |
4 |
| - mutable TradeId : int64; |
5 |
| - mutable ClientId : int64; |
6 |
| - mutable VenueId : int32; |
7 |
| - mutable InstrumentCode : int32; |
8 |
| - mutable Price : int64; |
9 |
| - mutable Quantity : int64; |
10 |
| - mutable Side : char} |
| 3 | +let NUM_RECORDS = 50L * 1000L * 444L |
11 | 4 |
|
12 |
| -let trades : FSMemTrade array = Array.zeroCreate NUM_RECORDS |
13 |
| -let prepareArray = |
14 |
| - for i in 0 .. (NUM_RECORDS - 1) do |
15 |
| - Array.set trades i {TradeId = (int64 0); ClientId = (int64 0); VenueId = (int32 0); InstrumentCode = (int32 0); Price = (int64 0); Quantity = (int64 0); Side = 'a'} |
| 5 | +type FSMemTrade = { |
| 6 | + TradeId : int64; |
| 7 | + ClientId : int64; |
| 8 | + VenueId : int32; |
| 9 | + InstrumentCode : int32; |
| 10 | + Price : int64; |
| 11 | + Quantity : int64; |
| 12 | + Side : char} |
16 | 13 |
|
17 |
| -let initTrades() = |
18 |
| - printfn "initiating trades" |
19 |
| - for i in 0 .. (NUM_RECORDS - 1) do |
20 |
| - let trade = { |
21 |
| - TradeId = (int64 i); |
22 |
| - ClientId = (int64 1); |
23 |
| - VenueId = (int32 123); |
24 |
| - InstrumentCode = (int32 321); |
25 |
| - Price = (int64 i); |
26 |
| - Quantity = (int64 i); |
27 |
| - Side = if (i%2 = 0) then 'S' else 'B'} |
28 |
| - Array.set trades i trade |
| 14 | +let initTrades (tradesArray : FSMemTrade array) = |
| 15 | + printfn "initiating trades" |
| 16 | + for i in 0 .. tradesArray.Length - 1 do |
| 17 | + let idx = int64 i |
| 18 | + tradesArray.[i] <- { |
| 19 | + TradeId = idx; |
| 20 | + ClientId = idx; |
| 21 | + VenueId = 123; |
| 22 | + InstrumentCode = 321; |
| 23 | + Price = idx; |
| 24 | + Quantity = idx; |
| 25 | + Side = if (i % 2 = 0) then 'S' else 'B' |
| 26 | + } |
29 | 27 |
|
30 |
| -let perfRun n = |
31 |
| - let startT = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond |
32 |
| - let mutable buyCost = (int64 0) |
33 |
| - let mutable sellCost = (int64 0) |
34 |
| - initTrades() |
35 |
| - for i in 0 .. (NUM_RECORDS - 1) do |
36 |
| - if (trades.[i].Side = 'B') then buyCost <- trades.[i].Price * trades.[i].Quantity else sellCost <- trades.[i].Price * trades.[i].Quantity |
37 |
| - let endT = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond |
38 |
| - let duration = endT - startT |
| 28 | +let perfRun n trades = |
| 29 | + let sw = Stopwatch.StartNew() |
| 30 | + let mutable buyCost = 0L |
| 31 | + let mutable sellCost = 0L |
| 32 | + initTrades trades |
| 33 | + for trade in trades do |
| 34 | + if (trade.Side = 'B') then |
| 35 | + buyCost <- trade.Price * trade.Quantity |
| 36 | + else |
| 37 | + sellCost <- trade.Price * trade.Quantity |
| 38 | + let duration = sw.ElapsedMilliseconds |
| 39 | + sw.Stop() |
39 | 40 | printfn "%d - duration %d ms" n duration
|
40 | 41 | printfn "buyCost = %O sellCost = %O" buyCost sellCost
|
41 | 42 |
|
42 | 43 | let main =
|
43 |
| - prepareArray |
44 |
| - for i in 0 .. 4 do |
45 |
| - perfRun i |
| 44 | + let array = Array.zeroCreate (int32 NUM_RECORDS) |
| 45 | + for i in 0 .. 5 do |
| 46 | + perfRun i array |
0 commit comments