У меня маленькая проблема. Я запрограммировал приложение winforms, которое рекурсивно ищет файлы в указанной папке и ее подпапках. Когда я запускаю приложение в первый раз, методу требуется 10 минут для поиска 100'000 файлов, но затем, когда я выполняю метод поиска во второй раз (без закрытия и повторного открытия окна), ему требуется удвоенное количество времени. почему это занимает вдвое больше времени?
редактировать: первый поиск: 10 минут, второй запуск: 20 минут, третий запуск 40 минут ...
вот мой метод поиска:
public void dirsearch(string sdir)
{
this.Invoke((MethodInvoker)delegate
{
progressBar.Refresh();
dataGridView.Refresh();
// runs on UI thread
});
foreach (string d in Directory.GetDirectories(sdir))
{
try
{
foreach (string f in Directory.GetFiles(d))
{
if (Regex.IsMatch(f, searchPattern, RegexOptions.IgnoreCase))
{
FileInfo file = new FileInfo(f);
string fileName = file.Name;
string filePath = f;
string user = File.GetAccessControl(filePath).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
properties.Add(new FileProperties(file.Name, f, file.Length, file.LastWriteTime));
//dataGridView.Refresh();
//progressBar.Refresh();
tryagainpoint:
cmd.CommandText = String.Format("insert into Attribute (Dateiname, Dateipfad, Dateierstellungsdatum, Dateiendung, Grösse, Ersteller, Letztes_mal_bearbeitet, FS) values ('{0}', '{1}', '{2}', '{3}', {4}, '{5}', '{6}', {7})", file.Name, f, file.CreationTime, file.Extension, file.Length, user, file.LastWriteTime, ID);
try
{
cmd.ExecuteNonQuery();
}
catch (OleDbException)
{
if (file.Name.Contains(@"'"))
{
fileName = file.Name.Replace(@"'", @"''");
filePath = f.Replace(@"'", @"''");
goto tryagainpoint;
}
}
finally
{
file = null;
}
}
}
dirsearch(d);
progressBar.MarqueeAnimationSpeed = 0;
}
catch (Exception exc) //Schreibt geworfene Exception in logfile.txt
{
WriteExceptionIntoTxtFile(exc);
continue;
}
}
}