c# - 优化文件操作

标签 c# multithreading redis filesystems asynchronous

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

我怎样才能提高这个应用程序的性能?

我能想到的是:

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

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

3.) 增加代码的并行性。每个线程将处理单独的文件并且应该更快。

上述方法行得通吗?请提出任何其他可能值得考虑的替代方案。

最佳答案

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

关于c# - 优化文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27869916/

相关文章:

c# - 具有固定平均值的随机数

c# - 使 C# 类库在 Visual Studio 2022 中 COM 可见

android - WebView - 线程

ruby-on-rails - 盲目直通已被弃用

c# - ASP.NET-如何定期监控数据库表?

c# - 为什么鼠标不移动时会触发 MouseMove 事件

c++ - 在线程中调用时 memcpy 变慢

c - 在 NUMA 机器上使用 CUDA 进行多 GPU 编程

windows - 为什么 Windows 系统不适合(生产模式)Key/Value DB

ruby-on-rails - Rails + Sidekiq 不识别类