C# - 循环浏览3万个PDF文件的文件夹的最快方法

时间:2017-01-18 19:56:09

标签: c#

我有一个包含3万个PDF文件的文件夹(请不要问为什么)。

我需要遍历它们并匹配在窗体日期选择器控件上选择的日期值上的日期。

这就是我所拥有的:

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        app:tabMode="fixed"
        app:tabGravity="fill"
        app:tabTextColor="#d3d3d3"
        app:tabSelectedTextColor="#ffffff"
        app:tabIndicatorColor="#ff00ff"
        android:minHeight="?attr/actionBarSize"
        />

在我获得列表中的文件之后,我将它们移动到另一个位置以进行各种其他处理,但我肯定想要加速的方面就是这部分。

速度相当慢,无论如何还要加快速度吗?

感谢。

2 个答案:

答案 0 :(得分:-1)

您不必等待构建整个文件列表(myList) - 您可以在第一个枚举文件之后开始处理。只需使用Parallel.ForEach下载并处理单个文件即可。在下面的示例中,我使用ConcurrentBag集合来存储结果。

var results = new ConcurrentBag<ProcessingResult>();

var files = di.EnumerateFiles("*.pdf").Where(x => x.LastWriteTime.Date == datetime.Date);
Parallel.ForEach(files, file => {
    var newLocation = CopyToNewLocation(file);
    var processingResult = ExecuteAditionalProcessing(newLocation);

    results.Add(processingResult);
});

答案 1 :(得分:-2)

如果Powershell是一个选项(我会推荐它),试试这个:

Get-ChildItem c:\folder | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)}

Get-Date将于今天返回,因此上述内容将返回所有在过去7天内修改过的文件。