7

ライブラリの基準とcmdargsを使用しました。

cmdargsを使用せずにプログラムを完全にコンパイルして実行すると、たとえば./prog --helpとすると、可能なオプションや実行回数などに関する基準から、不要な応答が返されます。

以下のようにコンパイルして実行すると、コマンドラインオプションが最初にコードによって選択され、次に基準によって読み取られます。その後、Criterionが報告し、オプション--byteが不明であることを示すエラーが発生します。基準のドキュメントでは、これをオフにする方法や回避する方法については何も見ていません。コマンドラインオプションを読んだ後でクリアする方法はありますか?それ以外の場合は、基準の代わりにCPUTimeなどを使用する必要があります。これは、基準が提供する追加の機能とデータの負荷を実際に必要とするため、問題ありません。

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}

import System.Console.CmdArgs

data Strlen = Strlen {byte :: Int} deriving (Data, Typeable, Show)

strlen = cmdArgsMode $ Strlen {byte = def} &= summary "MessagePack benchmark v0.04"

main = do
  n <- cmdArgsRun strlen
  let datastring = take (byte n) $ randomRs ('a','z') (mkStdGen 3)
  putStrLn "Starting..."
  conn <- connect "192.168.35.62" 8081
  defaultMain [bench "sendReceive" $ whnfIO (mywl conn datastring)] 
4

2 に答える 2

11

を使用しSystem.Environment.withArgsます。最初にコマンドライン引数を解析してcmdArgsから、使用していないものを渡しますcriterion

main = do
    (flags, remaining) <- parseArgsHowever
    act according to flags
    withArgs remaining $
        defaultMain [ ... ]
于 2011-12-08T17:27:31.663 に答える
3

基準ソースを見てください。defaultMainWithargsを無視したり、不明なargsを無視したりするなど、必要に応じてargsを処理する独自の関数を作成できるはずです。

于 2011-12-08T17:28:31.790 に答える