2
我有下面的代碼片段:爲什麼常數迴歸更快?
import Network.MessagePackRpc.Server
ping :: String -> IO String
ping s = return s
main :: IO()
main = do
serve 8081 [ ("add", fun add), ("ping", fun ping) ]
現在,我看到的是,當我發送帶有例如一個字符串100000個相同的1024字節字符串,小片段大約運行2秒。如果我去,用例如return "the-1024-byte-string"
,那麼運行速度大約快25%。我已經上下運動了。我真的很驚訝,這個影響如此巨大。有沒有人有解釋?
我猜懶惰在這裏做點事情。你是否嘗試過'ping!s = return return「-'-1024-byte-string」'? – fuz
你用'-O2'編譯了嗎?如果沒有用'-O2'和'-fllvm'編譯的第一次測試,現在有一條規則是不允許你在SO上提出性能問題。 –
@ ThomasM.DuBuisson Gevalt!我沒有llvm。 (幸運的是,我目前沒有任何性能問題。) –