我有一个用C#编写的应用程序,它涉及到很多文件操作,例如阅读、移动、删除、追加等。例如,从本地FS上的源路径读取文件,处理后,它被从那里删除,并且处理过的文件被写到本地文件系统的目标位置。2这是在一组系统上并行完成的,每个系统只处理本地文件。(文件由负载平衡器在它们之间分配)
我怎样才能提高这个应用程序的性能?
我能想到的是:
1.)为特定类型的操作(如删除)创建队列。将所需信息放入队列中,一个单独的线程将处理该队列。
2.)不要在文件系统上工作,而使用一个内存中的数据存储,如Redis。由于数据将在缓存中,操作将更快。
3.)增加代码的并行性。每个线程将在单独的文件上工作,应该会更快。
以上方法可行吗?请提出任何其他可能值得考虑的替代方法。
1条答案
按热度按时间ru9i0ody1#
1.)我建议将常见的上下文操作一起批处理,以减少sync\context切换开销,并利用处理器的缓存机制。
2.)将文件组合成一个文件将减少windows的每个文件握手的性能损失。
3.)尝试使用指针和\或Win32 API,在许多情况下,它们似乎比其托管 Package \lib实现更快。
4.)阻塞收集队列(生产者使用者)可能是一个很好的起点。