C# 优化文件操作

C# 优化文件操作,c#,multithreading,redis,filesystems,asynchronous,C#,Multithreading,Redis,Filesystems,Asynchronous,我有一个C#中的应用程序,它涉及很多文件操作,例如,读取、移动、删除、追加等。例如,从本地FS上的源路径读取文件,处理后,将其删除,并将处理后的文件写入本地FS上的目标位置。这一切都是在一组系统上并行完成的,每个系统只处理本地文件。(文件由负载平衡器在它们之间分发) 如何才能提高此应用程序的性能 我能想到的是: 1.)为特定类型的操作(如删除)创建队列。将所需信息放入队列中,一个单独的线程将处理该队列 2.)不要使用FS,而是使用内存中的数据存储,如Redis。由于数据将在缓存中,操作将更快 3

我有一个C#中的应用程序,它涉及很多文件操作,例如,读取、移动、删除、追加等。例如,从本地FS上的源路径读取文件,处理后,将其删除,并将处理后的文件写入本地FS上的目标位置。这一切都是在一组系统上并行完成的,每个系统只处理本地文件。(文件由负载平衡器在它们之间分发)

如何才能提高此应用程序的性能

我能想到的是:

1.)为特定类型的操作(如删除)创建队列。将所需信息放入队列中,一个单独的线程将处理该队列

2.)不要使用FS,而是使用内存中的数据存储,如Redis。由于数据将在缓存中,操作将更快

3.)提高代码的并行性。每个线程将在单独的文件上工作,速度应该更快

上述方法有效吗?请建议任何其他值得考虑的替代方案。

1。)我建议将常见的上下文操作批处理在一起,以减少同步/上下文切换开销,并利用处理器的缓存机制。 2.)将文件分组到单个文件将减少windows的每个文件握手性能损失。 3.)尝试使用指针和\或Win32 API,在许多情况下,它们似乎比托管包装器\lib实现更快。
4.)阻塞收集队列(生产者-消费者)可能是一个很好的起点。

除非您有多个正在使用的物理硬盘,否则并行性实际上对您没有任何好处。告诉驱动器一次做3件事只会涉及其中的2件事,直到第一件事完成,而不是3倍的加速。@Servy,所以你说在一个物理硬盘上只能执行一个操作,即使这些操作涉及不同的文件。@ptential unrlsd硬盘只有一个磁头,所以是的,一次只能读取/写入一个文件,除非您有多个驱动器。操作多个文件并不能改变这一点。