set and stream

Houssam Fakih fakih at ensm-douai.fr
Tue Aug 2 14:44:50 UTC 2005


>-----Message d'origine-----
>De : squeak-dev-bounces at lists.squeakfoundation.org [mailto:squeak-dev-
>bounces at lists.squeakfoundation.org] De la part de Boris Gaertner

>addAll: is not that bad. It is certainly better than concatenation with the
>#,  method. The problem with repeated concatenation is that
>increasingly large collections are copied again and again. This
>is avoided both with #addAll: and with a stream (for collection that
>a stream can write into).

[Fakih] 
I compare the code you sent to me with streams. #addAll is the method with
the high performance comparing to the concatenation #, (+48.57 %), and
streams (+7.265%).

" use of #streams "
|sets union stream|
 sets := OrderedCollection new.
 stream _ WriteStream on: {}.
 1 to: 100 do: [:idx | sets add: (Set with: idx)].
 Time millisecondsToRun:
  [ 1000 timesRepeat: 
   [1 to: 100 do: [:idx | stream nextPutAll: (sets at: idx)].
    1 to: 100 do: [:idx | stream nextPutAll: (sets at: idx)].
  ].union _ Set withAll: stream contents.].



Nevertheless if I test the following code, using streams is more performed
than #addAll: (+20.2 %) as well as than concatenation #, (+78.28):
 
|result time stream|
result _ Set new.
time _ Time millisecondsToRun: [
	1 to: 10000 do: [: index | result _ result, (Set with: ('a', index
asString)) ]].
Transcript cr; show: 'Concatenate Perf' ; show: time.


time _ 0.
result _ Set new.
time _ Time millisecondsToRun: [
	1 to: 10000 do: [: index | result addAll: (Set with: ('a', index
asString)) ]].
Transcript cr; show: 'AddAll Perf' ; show: time.


time _ 0.
result _ Set new.
stream _ WriteStream on: {}.
time _ Time millisecondsToRun: [
	1 to: 10000 do: [: index | stream nextPutAll: (Set with: ('a', index
asString)) ]].
Transcript cr; show: 'Stream Perf' ; show: time ; cr ; cr.

I can't see how I can decide between #addAll and #nextPutAll in case of
sets? In case of arrays to concatenate I'm convinced that streams are more
efficient.

Cheers,
Houssam





More information about the Squeak-dev mailing list