Bryan O'Sullivan avatar Bryan O'Sullivan committed b63aa2c

Just for completeness, a read-file benchmark

Comments (0)

Files changed (1)

benchmarks/ReadFile.hs

+{-# LANGUAGE BangPatterns, OverloadedStrings #-}
+
+import Control.DeepSeq
+import Control.Exception
+import Control.Monad
+import Data.Aeson
+import Data.Aeson.Parser
+import Data.Attoparsec
+import Data.Time.Clock
+import System.Environment (getArgs)
+import System.IO
+import qualified Data.ByteString as B
+
+main = do
+  (cnt:args) <- getArgs
+  let count = read cnt :: Int
+  forM_ args $ \arg -> bracket (openFile arg ReadMode) hClose $ \h -> do
+    putStrLn $ arg ++ ":"
+    start <- getCurrentTime
+    let loop !n
+            | n >= count = return ()
+            | otherwise = do
+          let go = do
+                s <- B.hGet h 16384
+                if B.null s
+                  then loop (n+1)
+                  else go
+          go
+    loop 0
+    end <- getCurrentTime
+    putStrLn $ "  " ++ show (diffUTCTime end start)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.