[erlang-questions] Parsing binaries performance
Bjorn Gustavsson
bjorn@REDACTED
Thu Jun 26 10:21:52 CEST 2008
Darren New <dnew@REDACTED> writes:
> Another possibility would be to try code that simply indexes into the
> binary instead of breaking it apart into a new binary, as that might not
> need to copy things around as much. Something like
>
> check_pos(Bin, Inx, Chr) ->
> <<_:Inx/binary, MaybeCh:integer, _/binary>>,
> Chr == MaybeCh.
>
> find_cr(Bin) -> find_cr(Bin, 0).
>
> find_cr(Bin, Inx) when Inx >= size(Bin) -> false;
> find_cr(Bin, Inx) -> check_pos(Bin, Inx, $\r)
> andalso check_pos(Bin, Inx+1, $\n).
That kind of optimization was good before R12B, but in R12B
it will generally be slower. See the Efficiency Guide:
http://erlang.org/doc/efficiency_guide/part_frame.html
Also, binary matching in R12B never copies any binaries.
Before R12B, unaligned binaries would be copied, but never
binaries starting on a byte boundary.
/Bjorn
--
Björn Gustavsson, Erlang/OTP, Ericsson AB
More information about the erlang-questions
mailing list