我在 LAN 网络共享上有数十万个 0 到 8kb 的小文本文件。我可以使用一些互操作调用,kernel32.dll
并FindFileEx
递归地提取每个文件的完全限定 UNC 路径的列表,并将路径存储在内存中的集合类中,例如List<string>
. 使用这种方法,我能够List<string>
相当快地填充(每个 50k 文件名大约 30 秒,而 3 分钟Directory.GetFiles
)。
不过,一旦我爬取了目录并将文件路径存储在其中,List<string>
我现在想对存储在列表中的每个路径进行传递,并读取小文本文件的内容并根据读取的值执行一些操作。
作为测试平台,我遍历了List<string>
存储 42,945 个文件路径到此 LAN 网络共享的每个文件路径,并在每个文件路径上执行了以下行FileFullPath
:
StreamReader file = new StreamReader(FileFullPath);
file.ReadToEnd();
file.Close();
因此,仅使用这些行,我的列表中存储的所有 42,945 个文件路径都需要 13-15 分钟的运行时间。
有没有更优化的方式通过 C# 加载许多小文本文件?我应该考虑一些互操作性吗?或者这几乎是我能期待的最好的?这似乎是一个非常长的时间。