
On 13 June 2005 11:30, Gracjan Polak wrote:
My space problems continued... :)
I have some ForeignPtr's, with finalizers (finalizerFree only). And I have lazyly produced list of those (yes, there is some unsafePerformIO magic behind, but I think I got this right). The problem is I get out-of-memory condition because elements get produced faster than those consumed are garbage collected.
Example:
list = ... mapM_ writeOut list
writeOut :: Ptr Word8 writeOut dat = do hPutBuh handle dat 1024 -- Control.Concurrent.threadDelay 1000
Uncommenting this line allows gc thread to run finalizers, memory gets freed, everything runs smoothly...
As far as I know finalizers are run in separate thread. How do I increase priority of this thread so it runs faster?
I presume you're running GHC. There's no way to increase the priority of a thread - GHC's scheduler doesn't have a concept of priorities. I would look into whether you can use mallocForeignPtr: this is much faster than using newForeignPtr with finalizerFree, because the memory is garbage collected directly and there's no need for a finalizer. Cheers, Simon