First optimisation in a while. hledger -s bal on my ledger took 2s, and profiling showed:
total time = 0.66 secs (33 ticks @ 20 ms)
total alloc = 3,631,667,848 bytes (excludes profiling overheads)
canonicaliseAmounts 1 0.0 0.8 69.7 92.4
rawLedgerCommoditiesWithSymbol 3928 27.3 23.1 69.7 91.6
rawLedgerCommodities 0 18.2 18.7 42.4 68.5
amounts 7712628 3.0 0.0 3.0 0.0
rawLedgerAmounts 0 0.0 9.3 21.2 49.9
rawLedgerTransactions 0 9.1 19.5 21.2 40.5
flattenEntry 3408636 12.1 21.0 12.1 21.0
Now it takes 1/2s and the profile is healthier:
total time = 0.14 secs (7 ticks @ 20 ms)
total alloc = 275,520,536 bytes (excludes profiling overheads)
canonicaliseAmounts 1 0.0 0.4 0.0 0.5
amounts 1964 0.0 0.0 0.0 0.0
rawLedgerTransactions 0 0.0 0.1 0.0 0.1
flattenEntry 868 0.0 0.1 0.0 0.1
|
||
|---|---|---|
| .. | ||
| Account.hs | ||
| AccountName.hs | ||
| Amount.hs | ||
| Commodity.hs | ||
| Dates.hs | ||
| Entry.hs | ||
| Ledger.hs | ||
| Parse.hs | ||
| RawLedger.hs | ||
| RawTransaction.hs | ||
| TimeLog.hs | ||
| Transaction.hs | ||
| Types.hs | ||
| Utils.hs | ||