我在C#中有一个应用程序涉及大量文件操作,即读取,移动,删除,追加等。例如,从本地FS上的源路径读取文件,处理后,它是从那里删除,处理后的文件写入本地FS的目标位置。这一切都是在一组系统上并行完成的,每个系统只在本地文件上工作。 (文件由负载均衡器在它们之间分发)
如何才能提高此应用程序的性能?
我能想到的是:
1。)为特定类型的操作(例如delete)创建队列。将所需信息放入队列中,单独的线程将处理队列。
2.。)而不是使用FS,使用内存数据存储,如Redis。由于数据将在缓存中,因此操作会更快。
3.增加代码的并行性。每个线程都将处理单独的文件,应该更快。
上述方法是否有效?请建议任何其他值得考虑的替代方案。
答案 0 :(得分:0)
1.)我建议将常见的上下文操作批处理,以减少sync \ context切换开销,并利用处理器的缓存机制。 2.)将文件一起分组到单个文件将减少Windows的每次文件性能损失的握手。 3.)尝试使用指针和\或Win32 API,在许多情况下看起来比它们的托管包装器/ lib实现更快。 4.)阻止收集队列(生产者消费者)可以是一个很好的起点。