【发布时间】:2023-03-22 20:25:01
【问题描述】:
我有一个相对路径的字符串列表。我还有一个字符串,其中包含这些文件的根路径。现在我像这样删除它们:
foreach (var rawDocumentPath in documents.Select(x => x.RawDocumentPath))
{
if (string.IsNullOrEmpty(rawDocumentPath))
{
continue;
}
string fileName = Path.Combine(storagePath, rawDocumentPath);
File.Delete(fileName);
}
问题是我为每个文件都调用Path.Combine,而且速度很慢。
如何加快此代码的速度?我无法删除整个文件夹,我无法更改当前目录(因为它会影响整个程序)...
我需要一个可以快速删除指定目录中多个文件的类。
【问题讨论】:
-
看不到任何会减慢代码速度的东西,正常情况下文件操作的瓶颈始终是 I/O 操作。您可能会尝试在此处使用多线程,例如文档.AsParallel().ForAll()
-
@MichaelSander 我知道,但是磁盘可以批量组织删除,你知道,命令队列等等。
-
如果你知道它是“全部”的东西,你可以做一个“*.doc”类型的方法,但是当你需要做细节时......你会受到更多的限制
-
根据我使用 kernel32.dll 及其用于处理文件的实用程序的经验,可以加快速度。当然,如果你对非托管代码没问题。
-
在“标准”解决方案、并行执行(或异步任务)和直接使用 Windows DLL 之间进行比较基准测试将会很有趣。你觉得 Path.Combine 比 File.Delete 慢吗?
标签: c# .net filesystems