0

私は辞書を持っています:

Dictionary<string, List<string>>

そして、ディレクトリをトラバースしてその情報をその辞書に保存するメソッド

public void TraverseDirectory(string startDir)
{
    //this.CreateNewFileWatcher(startDir);
    Dictionary<string, List<string>> dirsDictionary = new Dictionary<string, List<string>>();
    Dictionary<string, List<string>> filesDictionary = new Dictionary<string, List<string>>();
    Stack<DirectoryInfo> currentDirectorries = new Stack<DirectoryInfo>();
    DirectoryInfo startDirInfo = new DirectoryInfo(startDir);
    currentDirectorries.Push(startDirInfo);
    while (currentDirectorries.Count > 0)
    {
        var dir = currentDirectorries.Pop();
        this.AddNewDir(dir, dirsDictionary);
        try
        {
            var currentDirs = dir.GetDirectories();
            foreach (var currentDir in currentDirs)
            {
                currentDirectorries.Push(currentDir);
                try
                {
                    var files = currentDir.GetFiles();
                    foreach (var file in files)
                    {
                        this.AddNewFile(file, filesDictionary);
                    }
                }
                catch (UnauthorizedAccessException) { }
            }
        }
        catch (UnauthorizedAccessException) { }
    }

    dirsDictionary.Clear();
    filesDictionary.Clear();
}

基本的に、AddNewDir および AddNewFile メソッドは、ファイル/ディレクトリを辞書に追加します。これらは、テスト目的でより多く使用されます。ご覧のとおり、ディクショナリはメソッド内でのみ有効ですが、その後はメモリを解放せず、良い場合には 100MB まで増加します。その情報を MemoryMappedFiles に保存していますが、そこにある情報は一時的なものです。

メモリが解放されない理由がわかりましたか?

よろしく

4

1 に答える 1