我正在编写一个与文件系统一起工作的应用程序。当应用程序第一次启动时,它会运行一个快速例程将所请求的文件和文件夹加载到内存中,以便以后(时间密集型)处理。 (请参阅下面的代码)。在这一点上,它给了我一个有多少文件将被处理的计数,这对于显示进度条是非常重要的。一旦我有了计数和文件数据,我需要存储数据以供以后处理(例如作为全局变量或属性或类)。问题在于,由于它使用LINQ,所以它被存储为“var”。当我断开并检查变量时,它将作为SelectQueryOperator和AnonymousType的相当复杂的组合存储。如何制作“var”全局或持久?
我的第一个想法是继续并循环访问数据并将其转换为简单的数据,我可以将其存储为列表<>(例如存储文件名和路径),但这样做只需几分钟 - 最多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 };
这可能是花费时间的File.ReadAllText。你需要这样做吗?难道你不想仅仅存储文件名以待处理? – Polyfun 2012-08-17 14:29:42
你甚至可能没有足够的内存来存储所有文件的全部文本。 – Servy 2012-08-17 14:30:30