Преглед изворни кода

[FSharp] Fix: Improve FSharp Falco benchmarks by moving to Dapper (#9766)

Co-authored-by: HAMY <[email protected]>
Hamilton Greene пре 5 месеци
родитељ
комит
40b97c5db2

+ 1 - 0
frameworks/FSharp/falco/src/App/App.fsproj

@@ -15,6 +15,7 @@
   </ItemGroup>
 
   <ItemGroup>
+    <PackageReference Include="dapper" Version="2.1.66" />
     <PackageReference Include="Falco" Version="5.*" />
     <PackageReference Include="Npgsql" Version="9.*" />
   </ItemGroup>

+ 7 - 29
frameworks/FSharp/falco/src/App/Program.fs

@@ -1,6 +1,7 @@
 module Program
 
 open System.Data
+open Dapper
 open Falco
 open Falco.Markup
 open Falco.Routing
@@ -26,38 +27,15 @@ type Fortune =
           message = "Additional fortune added at request time." }
 
 let handleFortunes (connStr : string) : HttpHandler = fun ctx -> task {
-    use conn = new NpgsqlConnection(connStr)
-
-    use comd = conn.CreateCommand()
-    comd.CommandText <- "SELECT id, message FROM fortune"
-
-    do! conn.OpenAsync()
-    use! redr = comd.ExecuteReaderAsync(CommandBehavior.SequentialAccess)
-
-    let! dbFortunes =
-        task {
-            let mutable shouldContinue = true
-            let fortunes = ResizeArray<Fortune>()
 
-            while shouldContinue do
-                let! fortunesRead = redr.ReadAsync()
-
-                if not fortunesRead then
-                    shouldContinue <- false
-                else
-                    fortunes.Add { id = redr.GetInt32(0)
-                                   message = redr.GetString(1) }
-            return fortunes |> List.ofSeq
-        }
-
-    redr.Dispose()
-    comd.Dispose()
-    conn.Dispose()
+    use conn = new NpgsqlConnection(connStr)
+    let! data = conn.QueryAsync<Fortune>("SELECT id, message FROM fortune")
+    let fortunes = data.AsList()
+    fortunes.Add(Fortune.Default)
 
     let sortedFortunes =
-        Fortune.Default ::
-        dbFortunes
-        |> List.sortBy (fun f -> f.message)
+        fortunes
+        |> Seq.sortBy (fun f -> f.message)
 
     let html =
         Elem.html [] [