【发布时间】:2015-03-08 07:49:39
【问题描述】:
我有一个 C# 应用程序,它涉及到很多文件操作,即读取、移动、删除、追加等。例如,从本地 FS 上的源路径读取文件,经过处理后,它是从那里删除并将处理后的文件写入本地 FS 上的目标位置。这一切都是在一组系统上并行完成的,每个系统只处理本地文件。 (文件由负载均衡器在它们之间分配)
我怎样才能提高这个应用程序的性能?
我能想到的有:
1.) 为特定类型的操作(例如删除)创建队列。将所需的信息放入队列中,一个单独的线程将处理队列。
2.) 不要使用 FS,而是使用内存中的数据存储,例如 Redis。由于数据将在缓存中,因此操作会更快。
3.) 增加代码的并行度。每个线程将处理单独的文件,并且应该更快。
上述方法会奏效吗?请提出任何其他可能值得考虑的替代方案。
【问题讨论】:
-
除非您正在处理多个物理硬盘驱动器,否则并行性对您没有任何好处。告诉驱动器一次做 3 件事只会涉及其中 2 件事等到第一件事完成,而不是 3 倍加速。
-
@Servy,所以你说物理硬盘上实际上只能发生一个操作,即使这些操作涉及不同的文件。
-
@ptntialunrlsd 硬盘只有一个磁头,所以是的,它一次只能读/写一个文件,除非你有多个驱动器。您正在处理多个文件并不会改变这一点。
标签: c# multithreading redis filesystems asynchronous