Here's my code:

import std.datetime;
import std.file;
import std.stdio;

struct info
{
    string name;
    bool isDir;
    ulong size;
    SysTime timeCreated;
    SysTime timeLastAccessed;
    SysTime timeLastModified;

    this(DirEntry d)
    {
        this.name = d.name;
        this.isDir = d.isDir;
        this.size = d.size;
        this.timeCreated = d.timeCreated;
        this.timeLastAccessed = d.timeLastAccessed;
        this.timeLastModified = d.timeLastModified;
    }
}

void main()
{
    writeln("Scanning drives...");
    info[] results;
    for (char c = 'A'; c <= 'Z'; c++)
    {
        if (exists(c ~ ":\\"))
results ~= info(DirEntry(c ~ ":\\")) ~ scan(c ~ ":\\");
    }
    File f = File("driveInfo.txt", "w");
    foreach (i; results)
    {
        f.writeln(i);
    }
    f.close();
    writeln(memSize(results));
}

info[] scan(string dir)
{
    info[] results;
    try
    {
        auto de = dirEntries(dir, SpanMode.shallow);
        foreach (d; de)
        {
            if (d.isDir())
                results ~= info(d) ~ scan(d.name);
            else
                    results ~= info(d);
        }
    }
    catch (FileException fe){}
    return results;
}

size_t memSize(T)(T[] t)
{
    return t.length * T.sizeof;
}

But main's first writeln actually outputs after f.close().

The program uses ~1GB of RAM overall, even though main.results is ~50MB according to memSize. Any attempts to call the GC do nothing, but I'm probably doing it wrong though. Is it possible that I have a memory leak somewhere that is causing this delay, or is this a DMD problem, or something else I haven't even thought of?

DMD v2.060, Windows 7 x64

Thanks,

Josh

Reply via email to