[Haskell-cafe] Help with optimization

Mitar mmitar at gmail.com
Sun Jul 20 08:13:16 EDT 2008


Hi!

Profiling says that my program spends 18.4 % of time (that is around
three seconds) and 18.3 % of allocations in this function which is
saving the rendered image to a PPM file:

saveImageList :: String -> Int -> Int -> [ViewportDotColor] -> IO ()
saveImageList filename width height image = do
  B.writeFile filename file
    where file = B.append header bytes
          header = C.pack $ "P6\n" ++ show width ++ " " ++ show height
++ "\n255\n"
          bytes = B.pack $ concatMap (color . dealpha .
(\(ViewportDotColor _ c) -> c)) image
            where color (VoxelColor red green blue _) = [floor $ red *
255, floor $ green * 255, floor $ blue * 255]
                  dealpha c = addColor c (VoxelColor 1.0 1.0 1.0 1.0)
-- white background

For a 921615 bytes large file to save this is too much in my opinion.
And I think that it consumes to much allocations. Probably it should
not store intermediate lists?

Any suggestions?

Best regards


Mitar


More information about the Haskell-Cafe mailing list