
Hi there,
While trying to read a list of records from a binary database I think I've
encountered a space leak but I'm not proficient enough to detect the cause of
the error.
The culprit is the readSessionDB function in SessionDB module which I attach
with other relevant code.
What I do in Session.readSession is using FFI to read a fixed size record from
an input stream. That far, okay. (I have no idea if I'm doing it right,
though)
The problem is, combined with my approach in Session.readSessionDB, it results
in huge amounts of space allocation, about 1MB, whereas the raw data would
consume about 50K. It would be a [Session] with about 3000 elements, each of
which contains 3 Ints and 6 Floats.
I wonder if the following code in SessionDB is the proper way to read a list
of records from a file. I get the feeling that the (s:rest) in the last
return statement causes my problems.
readSessionList :: Handle -> IO [Session]
readSessionList h =
do session <- readSession h
case session of
Nothing -> return []
Just s -> do rest <- readSessionList h
return (s:rest)
Comments appreciated,
--
Eray Ozkural (exa)