[erlang-questions] Re: Interesting result of performance with string ++ vs prepend to list of string to append a list of string

Bob Ippolito <>
Sat Aug 7 07:13:52 CEST 2010


The best choice is to not concatenate them at all if you don't have
to, but if you do have to only concatenate two strings then of course
++ is the best way to do it.

On Sat, Aug 7, 2010 at 12:19 PM, Kaiduan Xie <> wrote:
> Robert,
>
> Thank you very much for the reply. I know the two operations are not
> equivalent. For the second case, lists:flatten(lists:reverse(R2))
> achieves the same result as 1), but lists:flatten(lists:reverse(R2))
> even consumes more time than 1).
>
> So ++ is the best choice if I want to concatenate strings.
>
> Thanks,
>
> Kaiduan
>
> On Fri, Aug 6, 2010 at 9:19 PM, Robert Virding <> wrote:
>> Two things:
>>
>> - the two operations you are doing are not equivalent, if you check
>> the resultant lists you will see they are different.
>>
>> - I would not initialise the strings in each test function as you have
>> done. While I think the BEAM does not build strings each time as it
>> did before, it still feels wrong to do it that way. :-)
>>
>> And maybe it is because ++ isn't as bad as people think, as long as
>> you use it wisely. In your case their is not really much else you can
>> do if you actually do want to concatenate the strings.
>>
>> Robert
>>
>> On 7 August 2010 02:37, Kaiduan Xie <> wrote:
>>> Sorry a typo, the result is that 1) is faster than 2).
>>>
>>> On Fri, Aug 6, 2010 at 8:35 PM, Kaiduan Xie <> wrote:
>>>> Hi, all,
>>>>
>>>> For a common operation like appending a list of string to get a new
>>>> string, I tried two ways, simple ++, add the string to the head of a
>>>> list of string and then reverse as below,
>>>>
>>>> L1 = "Welcome to erlang land\r\n",
>>>> L2 = "Welcome to Canada\r\n",
>>>>
>>>> 1) L = L1 ++ L2.
>>>>
>>>> 2) R1 = [L1];
>>>>    R2 = [L2  | R1];
>>>>    lists:reverse(R2)
>>>>
>>>> I expect 2) would be faster than 1) because everyone is talking ++ is
>>>> slow. However, the test result shows 2) is even faster than 1).
>>>>
>>>> 12> test:test_string_contact(1000000).
>>>> string++ time: 0.031/0.031 micro-seconds (runtime/wallclock)
>>>> ok
>>>> 13> test:test_list_contact(1000000).
>>>> list contact time: 0.125/0.124 micro-seconds (runtime/wallclock)
>>>>
>>>> Any idea why?
>>>>
>>>> Thanks,
>>>>
>>>> Kaiduan
>>>>
>>>
>>> ________________________________________________________________
>>> erlang-questions (at) erlang.org mailing list.
>>> See http://www.erlang.org/faq.html
>>> To unsubscribe; mailto:
>>>
>>>
>>
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:
>
>


More information about the erlang-questions mailing list