On 7/13/16 8:41 AM, Lodovico Giaretta wrote:
On Wednesday, 13 July 2016 at 12:37:26 UTC, Miguel L wrote:
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
 }

Well, I think foo's parameter should be `ref Appender!(A[]) bar` instead
of `out Appender!(A[]) bar`.

Yes, this is why you still have issues. An out parameter is set to its init value upon function entry, so you have lost all your allocation at that point.

Also, if you know you will append lots of
elements, doing a.reserve(s), with s being an estimate of the number of
appends you expect, might be a good idea.

This is true for builtin arrays as well.

-Steve

Reply via email to