为什么当回收站有大量文件时,FileSystem.DeleteFile方法会创建多个线程?

时间:2015-07-30 00:28:29

标签: c# .net multithreading winforms visual-studio-2013

我对FileSystem.DeleteFile方法有一个小问题。 所以我有一个创建html文件的软件,在生成文件之前,我使用FileSystem.DeleteFile方法将所有内容从输出目录移动到回收站。但是我发现当我的回收站有很多文件(之前大约有10,000个)时,这个DeleteFile方法创建了许多线程(最多480个),如截图所示,并且线程在此方法完成后保留。如果我再次运行,我会收到一个OutOfMemoryException(我有6GB的ram)。

high threads and memory usage

然而,在我清空回收站之后,我的软件运行顺利,线程稳定在25左右,内存使用量不超过100 MB low threads and memory usage

我做了很多测试,我确信代码中没有非托管对象,我可以通过填充垃圾文件堆来重新创建问题。

更新

            string[] files = Directory.GetFiles(txtPath.Text);
            string[] folders = Directory.GetDirectories(txtPath.Text);
            pb.Maximum = files.Length + folders.Length;
            pb.Value = 0;
            foreach (string file in files)
            {
                FileSystem.DeleteFile(file, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
                pb.Value += 1;
                Application.DoEvents();
            }
            foreach (string folder in folders)
            {
                FileSystem.DeleteDirectory(folder, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
                pb.Value += 1;
                Application.DoEvents();
            }
            MessageBox.Show("Done!");

0 个答案:

没有答案