Using closure causes GC allocation

Vino.B via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Sep 5 21:23:51 PDT 2017


On Monday, 4 September 2017 at 14:42:45 UTC, Azi Hassan wrote:
> On Monday, 4 September 2017 at 05:45:18 UTC, Vino.B wrote:
>>   In order to resolve the issue "Using closure causes GC 
>> allocation" it was stated that we need to use delegates
>
> Alternatively you can drop the functional style and use a 
> foreach loop that doesn't require delegates, but you'd still 
> need the GC to store the result in an array. And even then you 
> could still use Array (from std.container).

Hi All,

  Was able to resolve this issue, thank you for your help, below 
is the changes that i did to resolve the issue.


import std.stdio: File,writeln;
import std.datetime.systime: Clock, days, SysTime;
import std.file: SpanMode, dirEntries, exists, isFile, mkdir, 
remove;
import std.typecons: tuple, Tuple;
import std.algorithm:  filter, map, each;
import std.array: array;

Tuple!(string)[] logClean (string[] Lglst, int LogAge) {
	if (!Lglst[0].exists) { mkdir(Lglst[0]); }
		auto dFiles = dirEntries(Lglst[0], SpanMode.shallow).filter!(a 
=a.exists && a.isFile && a.timeCreated < dtLogAge).map!(a 
=tuple(a.name)).array;
	dFiles.each!(a =a[0].remove);
	return dFiles;
}

SysTime dtLogAge () {
int LogAge = mParams[1];
auto ct2 = Clock.currTime();
auto st2 = ct2 + days(-LogAge);
return st2;
}

void main () {
string[] LogDir = 
["C:\\Users\\admin\\Desktop\\Current\\Script\\D\\Logs"];
logClean(LogDir);
}

"mParams" is another function that reads the value from the 
configuration file and returns the value for the LogAge as 
defined in the configuration file.

From,
Vino.B


More information about the Digitalmars-d-learn mailing list