字典没有释放内存
本文关键字:内存 释放 字典 | 更新日期: 2023-09-27 18:29:53
我有一本字典:
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中,其中的信息是临时的。
你知道为什么内存没有被释放吗?
问候
.NET在不需要的情况下不会释放内存。在一个紧张的周期中,内存增加几十mb是很常见的。如果您想检查内存是否可回收,请尝试添加:
GC.Collect();
GC.WaitForPendingFinalizers();
请注意,最后通常不需要使用这些命令。如果GC需要更多内存(或者当程序因某些原因暂停时),它将释放内存