私は辞書を持っています:
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 に保存していますが、そこにある情報は一時的なものです。
メモリが解放されない理由がわかりましたか?
よろしく