Skip to content

Commit b0c28d3

Browse files
committed
compare perf to old version
1 parent 93bfbf5 commit b0c28d3

4 files changed

Lines changed: 64 additions & 43 deletions

File tree

paket.dependencies

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ nuget NUnit
55
nuget NUnit.Runners
66
nuget FAKE
77
nuget SourceLink.Fake
8+
nuget FSharp.Control.AsyncSeq 1.15.0
89

910
github fsharp/FAKE modules/Octokit/Octokit.fsx

paket.lock

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
NUGET
22
remote: https://nuget.org/api/v2
33
specs:
4-
FAKE (3.26.1)
5-
FSharp.Compiler.Service (0.0.86)
6-
FSharp.Formatting (2.7.5)
7-
FSharp.Compiler.Service (>= 0.0.82)
8-
FSharpVSPowerTools.Core (>= 1.7.0)
9-
FSharpVSPowerTools.Core (1.7.0)
10-
FSharp.Compiler.Service (>= 0.0.81)
4+
FAKE (3.31.4)
5+
FSharp.Compiler.Service (0.0.89)
6+
FSharp.Control.AsyncSeq (1.15.0)
7+
FSharp.Formatting (2.9.6)
8+
FSharp.Compiler.Service (>= 0.0.87)
9+
FSharpVSPowerTools.Core (1.8.0)
10+
FSharpVSPowerTools.Core (1.8.0)
11+
FSharp.Compiler.Service (>= 0.0.87)
1112
Microsoft.Bcl (1.1.10)
1213
Microsoft.Bcl.Build (>= 1.0.14)
1314
Microsoft.Bcl.Build (1.0.21)
@@ -16,11 +17,11 @@ NUGET
1617
Microsoft.Bcl.Build (>= 1.0.14)
1718
NUnit (2.6.4)
1819
NUnit.Runners (2.6.4)
19-
Octokit (0.8.0)
20+
Octokit (0.11.0)
2021
Microsoft.Net.Http
2122
SourceLink.Fake (0.5.0)
2223
GITHUB
2324
remote: fsharp/FAKE
2425
specs:
25-
modules/Octokit/Octokit.fsx (60e49f7c915a8134a5f07ca408249e4bd7cc4a63)
26+
modules/Octokit/Octokit.fsx (ac46f8ba9cc11bb6e8d02197720697c9e258c0d3)
2627
Octokit

src/FSharp.Control.AsyncSeq/AsyncSeq.fs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,9 @@ module AsyncSeq =
230230
| BindState.HaveEnumerator ->
231231
let! res = enum.Value.MoveNext()
232232
return (match res with
233-
| None ->
234-
x.Dispose()
235-
None
236-
| Some _ -> res)
233+
| None -> x.Dispose()
234+
| Some _ -> ()
235+
res)
237236
| _ ->
238237
return None }
239238
member x.Dispose() =
@@ -282,12 +281,10 @@ module AsyncSeq =
282281
type TryWithState =
283282
| NotStarted = -1
284283
| HaveBodyEnumerator = 0
285-
| Finished = 1
286-
| PreHandler = 2
287-
| HaveHandlerEnumerator = 3
284+
| HaveHandlerEnumerator = 1
285+
| Finished = 2
288286

289287
/// Implements the 'TryWith' functionality for computation builder
290-
// this pushes the handler through all the async computations
291288
let tryWith (inp: AsyncSeq<'T>) (handler : exn -> AsyncSeq<'T>) : AsyncSeq<'T> =
292289
{ new IAsyncEnumerable<'T> with
293290
member x.GetEnumerator() =
@@ -311,7 +308,6 @@ module AsyncSeq =
311308
| Choice2Of2 exn ->
312309
return!
313310
(x.Dispose()
314-
state := TryWithState.PreHandler
315311
enum := (handler exn).GetEnumerator()
316312
state := TryWithState.HaveHandlerEnumerator
317313
x.MoveNext())
@@ -324,15 +320,15 @@ module AsyncSeq =
324320
with exn ->
325321
res := Choice2Of2 exn
326322
match res.Value with
327-
| Choice1Of2 (Some res) ->
328-
return (Some res)
329-
| Choice1Of2 None ->
330-
x.Dispose()
331-
return None
323+
| Choice1Of2 res ->
324+
return
325+
(match res with
326+
| None -> x.Dispose()
327+
| _ -> ()
328+
res)
332329
| Choice2Of2 exn ->
333330
return!
334331
(x.Dispose()
335-
state := TryWithState.PreHandler
336332
enum := (handler exn).GetEnumerator()
337333
state := TryWithState.HaveHandlerEnumerator
338334
x.MoveNext())

tests/FSharp.Control.AsyncSeq.Tests/AsyncSeqTests.fs

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
#if INTERACTIVE
2+
#if COMPARE_TO_OLD
3+
#r @"../../packages/FSharp.Control.AsyncSeq/lib/net40/Fsharp.Control.AsyncSeq.dll"
4+
#else
25
#r @"../../bin/FSharp.Control.AsyncSeq.dll"
6+
#endif
37
#r @"../../packages/NUnit/lib/nunit.framework.dll"
48
#time "on"
59
#else
@@ -708,36 +712,38 @@ let ``asyncSeq.For should delay``() =
708712

709713

710714

715+
711716
let empty = async { return () }
712717
let perfTest1 n =
713718
Seq.init n id
714719
|> AsyncSeq.ofSeq
715720
|> AsyncSeq.iterAsync (fun _ -> empty )
716721
|> Async.RunSynchronously
717722

718-
// n OLD NEW
719-
//perfTest1 1000 - 0.244 0.001
720-
//perfTest1 2000 - 0.922
721-
//perfTest1 3000 - 2.091
722-
//perfTest1 4000 - 3.811
723-
//perfTest1 5000 - 6.311
724-
//perfTest1 6000 - 10.071 0.006
725-
//perfTest1 10000 - 38..0 0.012
726-
//perfTest1 100000 - 0.129
727-
//perfTest1 1000000 - 0.708
723+
// n NEW 1.15.0
724+
//perfTest1 1000 - 0.001 0.004
725+
//perfTest1 2000 -
726+
//perfTest1 3000 -
727+
//perfTest1 4000 -
728+
//perfTest1 5000 -
729+
//perfTest1 6000 - 0.006 0.020
730+
//perfTest1 10000 - 0.012
731+
//perfTest1 100000 - 0.129 0.260
732+
//perfTest1 1000000 - 0.708 2.345
733+
728734

729735
let perfTest2 n =
730736
Seq.init n id
731737
|> AsyncSeq.ofSeq
732738
|> AsyncSeq.toArray
733739

734-
// n OLD NEW
735-
//perfTest2 1000 0.227 0.038
736-
//perfTest2 2000 0.905 0.001
737-
//perfTest2 3000 2.154 0.004
738-
//perfTest2 4000 3.757
739-
//perfTest2 5000 6.197
740-
//perfTest2 10000 38.197 0.007
740+
// n NEW
741+
//perfTest2 1000 0.038
742+
//perfTest2 2000 0.001
743+
//perfTest2 3000 0.004
744+
//perfTest2 4000
745+
//perfTest2 5000
746+
//perfTest2 10000 0.007
741747
//perfTest2 100000 0.076
742748
//perfTest2 1000000 0.663
743749

@@ -755,12 +761,29 @@ let perfTest3 n =
755761
|> AsyncSeq.toArray
756762

757763

758-
// n OLD NEW
764+
// n NEW 1.15.0
759765
//perfTest3 1000 0.003
760766
//perfTest3 2000
761767
//perfTest3 3000
762768
//perfTest3 4000
763769
//perfTest3 5000 0.009
764770
//perfTest3 10000 0.015
765771
//perfTest3 100000 0.155
766-
//perfTest3 1000000 1.500
772+
//perfTest3 1000000 1.500 3.480
773+
774+
let perfTest4 n =
775+
Seq.init n id
776+
|> AsyncSeq.ofSeq
777+
|> AsyncSeq.map id
778+
|> AsyncSeq.filter (fun x -> x % 2 = 0)
779+
|> AsyncSeq.toArray
780+
781+
// n NEW 1.15.0
782+
//perfTest4 1000
783+
//perfTest4 2000
784+
//perfTest4 3000
785+
//perfTest4 4000
786+
//perfTest4 5000
787+
//perfTest4 10000
788+
//perfTest4 100000 0.362 0.442
789+
//perfTest4 1000000 3.533 4.656

0 commit comments

Comments
 (0)