foldl' is the right way to simulate the sequential IO action, foldr would
be doing it in reverse (and for large enough input will stack overflow).


On Thu, Aug 29, 2013 at 9:33 PM, Kyle Hanson <hanoo...@gmail.com> wrote:

> Thanks Bob,
>
> I made it foldr because it was meant to simulate the sequential IO action
> that my server uses to populate the Map.
>
> I found the problem to be that I need to force the map to evaluate so
> adding a little $! fixed the problem
>
> --
> Kyle Hanson
>
>
>
>
> On Thu, Aug 29, 2013 at 9:09 PM, Bob Ippolito <b...@redivi.com> wrote:
>
>> Building a map with foldr seems unwise, have you tried doing it with
>> fromListWith instead? Or foldl'? In either case, since you don't even put
>> the map into WHNF, none of the computation is done at all in either case
>> until the first lookup.
>>
>>
>> On Thu, Aug 29, 2013 at 3:35 PM, Kyle Hanson <hanoo...@gmail.com> wrote:
>>
>>> OK
>>>
>>> I have a bunch of BSON documents that I convert to ByteStrings, put in a
>>> Map, and write to a socket based on the response. I noticed some high
>>> memory usage (in the GBs) so I decided to investigate. I simplified my
>>> problem into a small program that demonstrates clearer what is happening.
>>>
>>> I wrote two versions, one with a Lazy Map and Lazy ByteStrings and one
>>> with a Strict Map and Strict ByteStrings. Both share the same memory
>>> behavior (except the lazy BS one is faster)
>>>
>>> Here is the strict version:
>>>
>>> http://lpaste.net/92298
>>>
>>> And here is the lazy version:
>>>
>>> http://lpaste.net/92299
>>>
>>> I wrote this and compared the memory and speed behavior of ByteStrings
>>> generated by converting it from a BSON document and ByteStrings generated
>>> more purely.
>>>
>>> The length of the ByteString from a BSON document is 68k and the length
>>> of the "pure" BS is 70k.
>>>
>>> This is my weird memory behavior, both BSON and "pure" methods use the
>>> same amount of memory after inserting 10k of them (90mb)
>>>
>>> However when I go to lookup a value, the BSON Map explodes the memory to
>>> over 250mb. Even if I lookup just 1 value. Looking up any number of values
>>> in the "pure BS" keeps the memory usage stable (90mb).
>>>
>>> I am hoping someone can help me understand this. I have read some posts
>>> about Temporary ByteStrings causing memory issues but I don't know how to
>>> get started debugging.
>>>
>>> --
>>> Kyle Hanson
>>>
>>> _______________________________________________
>>> Haskell-Cafe mailing list
>>> Haskell-Cafe@haskell.org
>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>
>>>
>>
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to