我正在编写一个适用于文件系统的应用程序。当应用程序第一次启动时,它会运行一个快速例程将请求的文件和文件夹加载到内存中以供以后(时间密集型)处理。(见下面的代码)。在这一点上,它给了我将要处理多少文件的计数,这对于显示进度条很重要。
一旦我有了计数和文件数据,我需要存储数据以供以后处理(例如,作为全局变量或属性或类)。问题是它必须存储为“var”,因为它使用的是 LINQ。当我打破并检查变量时,它被存储为 SelectQueryOperator 和 AnonymousType 的相当复杂的组合。
我的第一个想法是继续遍历数据并将其转换为可以存储为 List<> 的简单数据(例如存储文件名和路径),但这样做实际上需要几分钟 - 最多 10 分钟或更长时间 - 到过程。无论如何,我稍后将不得不遍历所有这些数据以进行处理,而且我的用户不可能坐下来等待首先建立一个列表。
如何存储这些数据,以便以后可以访问它而不必先将其转换为其他东西?
var fileNames =
from dir in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories)
select dir;
var fileContents = from file in fileNames.AsParallel()
// Use AsOrdered to preserve source ordering
let extension = Path.GetExtension(file)
let Text = File.ReadAllText(file)
select new { Text, FileName = file };