
On Mon, Aug 29, 2011 at 5:08 PM, Chris Smith
I know a lot of you use aeson for JSON encoding, and I get the feeling I'm doing something wrong here, so if you can give me some kind of a hint, I'd appreciate it.
The aeson package description talks about getting up to around 40K messages per second from the encoding, but I'm pegging the CPU at 100% just trying to send 10 messages per second. Profiling (which is a REAL pain to reproduce, since the GHC API is involved... but I locally butchered a copy of the code enough to route around that) shows JSON serialization taking 98% of the CPU and doing 99.8% of allocations (on the order of 5 GB of total allocation if I leave it running for 15 seconds). Heap profiling also shows the vast majority of the heap occupied by aeson's types (Value, Number, etc), and with huge spikes.
Dumb question: are the values you're encoding forced before you call
the JSON serialization function? If you have unevaluated thunks in
there, it could cause the profiler to misattribute the time to aeson.
G
--
Gregory Collins