
Daniel Fischer ha scritto:
Am Dienstag, 3. März 2009 15:35 schrieb Manlio Perillo:
At first guess it sounds like you're holding onto too much, if not the whole stream perhaps bits within each chunk. It is possible.
I split the string in lines, then map some functions on each line to parse the data, and finally calling toU, for converting to an UArr. Just to make sure (code fragments or, better, reduced examples would make it easier to see what the discussion is about): are you forcing the UArr to be constructed before putting it into the Map?
Claus Reinke ha scritto: parse handle = contents <- S.hGetContents handle let v = map singleton' $ ratings contents let m = foldl1' (unionWith appendU) v v `seq` return $! m
The (v `seq` ) is completely useless. Maybe (size m) `seq` return m would help?
In one of my tests I did: rnf v `seq` rnf m `seq` return m Memory usage was the same -- XXX these are missing from uvector package instance (NFData a, NFData b) => NFData (a :*: b) where -- NOTE: (:*:) is already strict rnf (a :*: b) = a `seq` b `seq` () instance NFData a => NFData (UArr a) where -- NOTE: UArr is already strict rnf array = array `seq` () Regards Manlio