【发布时间】:2023-04-09 05:11:01
【问题描述】:
我的问题是我有一个递归方法,它给出了一个在所有子文件夹中输入的路径,并将文件名和一些信息存储在数据库中。 在我使用一个包含 31000 个文件和很多子文件夹的文件夹之前,它工作得很好。我对该方法的参数是他正在工作的路径,作为数据库类的父路径和执行一些插入和选择的数据库类。我的问题是使用 ref 关键字是否有助于解决内存问题?
抱歉,如果有关于此的文章。我什么都没找到。
public void ManageFiles(string path, Table Father, DataBaseHandlerClass DB)
{
try
{
log.Info("---------------------------Inicio Pasta " + path + "--------------------------");
DirectoryInfo d = new DirectoryInfo(path);
DirectoryInfo[] Dirs = d.GetDirectories();
int hashCode = path.GetHashCode();
IFB_FilePath FilePath = DB.InsertOrUpdatePath(hashCode, path, Father == null ? null : (int?)Father.ID);
foreach (var newPath in Dirs)
{
ManageFiles(newPath.FullName, FilePath, DB);
}
List<string> ext = DB.GetExtensionsToSearch();
FileInfo[] Files = d.GetFiles("*.*").Where(s => ext.Contains(s.Extension.ToLower())).ToArray();
var watch = System.Diagnostics.Stopwatch.StartNew();
foreach (FileInfo file in Files)
{
watch = System.Diagnostics.Stopwatch.StartNew();
FileTable Ficheiro = DB.InsertOrUpdateFile(file, FilePath);
if (Ficheiro.ID_Extension_Group == 1 && !Ficheiro.Metadata.Any())
{
CreateFileMetadata(DB, Ficheiro);
}
else
{
if (Ficheiro.ID_Extension_Group == 1 && Ficheiro.TakenDate == null)
{
UpdateTakenDate(DB, Ficheiro);
}
}
watch.Stop();
log.Info("Tempo em ms: " + watch.ElapsedMilliseconds + " Ficheiro " + file.Name);
}
log.Info("---------------------------Fim Pasta " + path + "--------------------------");
}
catch (Exception Ex)
{
log.Error(Ex);
}
}
【问题讨论】:
-
我想我会先将所有路径位置存储在数据库中,然后我会一一查看文件。
标签: c# visual-studio out-of-memory recursive-datastructures