c# - 从多个线程无锁写入文件

标签 c# multithreading task-parallel-library .net-4.5

我需要从不同线程逐个将数据缓冲区写入文件。为了避免锁定,我正在写入不同的文件,比如“file_1”、“file_2”,最后将所有这些文件合并到“file”。这种方法好吗?有更好的建议吗?

有些文件非常大,包含数千个缓冲区。因此,数以千计的临时文件被创建,随后被合并和清理。

最佳答案

我的直觉是,修改文件的成本很高,而且管理数千个文件听起来既复杂又容易出错。

不如让一个专门的线程来进行写作怎么样。其他线程只是将它们的消息添加到等待写入的队列中。虽然会有一些同步开销,但实际在锁中完成的工作非常少,只是将指向消息的“指针”复制到队列中。由于打开文件并写入文件可能比使用互斥体更昂贵,您实际上可能会提高性能。

关于c# - 从多个线程无锁写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19902392/

相关文章:

c++ - 使用优化标志编译时线程不启动

java - 从套接字读取和写入

c# - .Net BlockingCollection.Take(2) : Safely removing two items at a time

c# - 在 .NET 中实现粘性覆盖

c# - 是否有内置方法来比较集合?

c# - 如何调用我的 dll 并在 powershell 脚本中使用它

c# - 如何在不阻塞 UI 线程的情况下使任务超时?

c# - Silverlight - C# 和 LINQ - 按多个字段排序

c++ - QThread - 使用 moveToThread 将类成员移动到线程

c# - 如何让每个方法等待完成 parallel.Foreach 中的另一个方法?