加快昂贵的IEnumerable <t>操作

时间:2017-06-22 18:32:26

标签: c# performance ienumerable

我正在开发一个C#库,它通过网络递归枚举远程共享的子文件夹。这是一项昂贵的操作,可能需要遍历数千个文件夹。为客户端执行此工作的方法返回IEnumerable<string>,并使用延迟评估(通常是IEnumerable<T>的情况,因此调用本身返回非常快,但是当客户端执行时对返回值进行foreach循环或Take()调用,事情变得非常缓慢。

我正在寻找提高速度的方法。一些想法包括:

  1. 通过让我的库检索所有项目并将其存储在List<string>中,例如,在将其返回给客户端之前,避免延迟枚举。这会使方法调用慢得多,但迭代速度要快得多。
  2. 删除枚举所有子文件夹的功能,并要求客户端指定某种过滤器,以限制要遍历的项目数。
  3. 使用完全不同的方法枚举避免IEnumerable<T>
  4. 的文件夹

    我已经没有想法了。您建议采用什么方法来快速完成这项工作?谢谢。

1 个答案:

答案 0 :(得分:1)

这是客户端 - 服务器通信的问题。

使用{{1}}作为接口很好。

选项#2是性能最高的通用解决方案。如果远程文件夹不经常更改,请考虑在查询结果上实现缓存。