2011-12-07 9 views
2

I持って次のスニペット:私は守っ何今定数が返されるのはなぜですか?

import Network.MessagePackRpc.Server 

ping :: String -> IO String 
ping s = return s 

main :: IO() 
main = do 
    serve 8081 [ ("add", fun add), ("ping", fun ping) ] 

、その私は、例えば文字列を送信するとき1024バイトの文字列が100000と同じ場合、小さなスニペットは約2秒で実行されます。私が行って、リターンsを例えばと置き換えると。 return "the-1024-byte-string"これは約25%速く実行されます。私はこれを上下に行使した。その影響はとても大きいと私は本当に驚いています。誰か説明がありますか?

+1

私は怠惰がここで何かをしていると思います。 'ping!s = 1024バイト文字列"を返しますか? " – fuz

+3

'-O2'でコンパイルしていますか? '-O2'と' -fllvm'でコンパイルされたテストを最初にテストすることなく、あなたがSOのパフォーマンスに関する質問をすることは許されません。 –

+1

@ ThomasM.DuBuisson Gevalt!私はllvmを持っていません。 (幸いにも私は現在パフォーマンスに関する質問もありません) –

答えて

3

(コンパイル時に)既知の定数を返すと、より多くのインライン化が可能になります。しかし、生成されたコードを確認する必要があります。

関連する問題