gpt4 book ai didi

c# - 优化许多小文件的流式传输

转载 作者:可可西里 更新时间:2023-11-01 09:25:35 24 4
gpt4 key购买 nike

我在 LAN 网络共享上有数十万个大小在 0 到 8kb 之间的小文本文件。我可以使用一些互操作调用 kernel32.dllFindFileEx递归地提取每个文件的完全限定 UNC 路径的列表,并将路径存储在内存中的集合类中,例如 List<string> .使用这种方法,我能够填充 List<string>相当快(每 50k 个文件名大约需要 30 秒,而 Directory.GetFiles 需要 3 分钟)。

不过,一旦我爬取目录并将文件路径存储在 List<string> 中我现在想传递存储在列表中的每个路径并读取小文本文件的内容并根据读入的值执行一些操作。

作为测试平台,我迭代了 List<string> 中的每个文件路径。将 42,945 个文件路径存储到此 LAN 网络共享并在每个 FileFullPath 上执行以下行:

            StreamReader file = new StreamReader(FileFullPath);
file.ReadToEnd();
file.Close();

因此仅使用这些行,我的列表中存储的所有 42,945 个文件路径需要 13-15 分钟的运行时间。

是否有更优化的方式来通过 C# 加载许多小文本文件?我应该考虑一些互操作吗?或者这几乎是我能期待的最好的?这似乎是一段非常长的时间。

最佳答案

我会考虑使用 Directory.EnumerateFiles ,然后在您阅读文件时对其进行处理。

这将避免需要一次实际存储 42,945 个文件的列表,并打开使用 PLINQ 并行执行某些处理的潜力(取决于文件的处理要求)。

如果处理在总时间中有相当大的 CPU 部分(并且它不是纯粹的 I/O 限制),这可能会在所需的完整时间方面提供很大的好处。

关于c# - 优化许多小文件的流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12060721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com