Best way to clear dynamic array for reuse
Miguel L via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Jul 13 05:37:26 PDT 2016
On Wednesday, 13 July 2016 at 12:05:18 UTC, Lodovico Giaretta
wrote:
> On Wednesday, 13 July 2016 at 11:59:18 UTC, Miguel L wrote:
>> I am using a temporary dynamic array inside a loop this way:
>> A[] a;
>> for(....)
>> {
>> a=[]; //discard array contents
>> ... appends thousand of elements to a
>> ... use a for some calculations
>> }
>>
>> I would like to know which would be the best way to clear a
>> contents avoiding reallocations, as there seems to be lots of
>> garbage collection cycles taking place.
>>
>> The options would be:
>>
>> a=[];
>> a.length=0;
>> a=null;
>> ...
>> any other?
>>
>> Can you help me please?
>
> Use std.array.Appender. It allows faster appends, and has a
> handy .clear method that zeroes the length of the managed
> array, without de-allocating it, so the same buffer is reused.
I tried Appender, but for some reason garbage collector still
seems to be running every few iterations.
I will try to expand a little on my code because maybe there is
something i am missing:
Appender!(A[]) a;
void foo( out Appender!(A[]) bar)
{
...
bar~= lot of elements
}
for(....)
{
//a=[]; //discard array contents
a.clear();
foo(a) appends thousand of elements to a
... use a for some calculations
}
More information about the Digitalmars-d-learn
mailing list