c# - 在线程频繁写的情况下,哪种方式更好?

标签 c# .net multithreading performance

我们需要以大约 100ms 的间隔将一些数据写入文件中,大约 30 分钟,然后等待一段时间,然后再次重复。我们的应用程序是 C#、.net 3.5 应用程序。每次写入的数据很小,不到1MB。现在我们从线程池中获取一个线程,并让该线程在每次接收到新数据时(大约 100 毫秒间隔)写入文件。

我认为还有另一种方法可以做到这一点。我们可以在开始时从 Threadpool 中获取一个线程,并在整个写入 session 期间保持该线程运行。当该线程完成写入时,让它等待下一个信号以从共享位置获取更新数据并再次写入。这种方式的缺点是我们需要同步共享数据对象,以确保如果写入速度较慢,它不会被新数据覆盖。那么它可能会减慢从另一个系统传输数据的通信速度。

我还没有时间编写代码测试它们。你认为值得测试它们吗?还是显然一种方式比另一种方式更好?

最佳答案

您可以使用生产者/消费者模式,这样一个线程可以一直锁定文件,您不需要打开和关闭 FileStream。

这里有一个例子:http://www.yoda.arachsys.com/csharp/threads/deadlocks.shtml

(在“更多监控方法”部分)

关于c# - 在线程频繁写的情况下,哪种方式更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408793/

相关文章:

c# - C# 中无法使用 Windows 性能计数器(在 Azure 辅助角色上)

.net - 如何使 HttpContext 可供我的单元测试使用?

multithreading - perl 线程自分离

c++ - 使用 cudaSetDeviceFlags 的正确位置?

.net - 当 .net 程序由于未捕获的异常而退出时,操作系统级别会发生什么情况?

c++ - 分析多线程代码,采样如何工作

c# - 检测用户是否在 WPF 中移动了窗口

c# - SQL Azure 连接因大型 json 字符串而关闭

c# - Entity Framework - 默认值未在 sql server 表中设置

c# - 如何深度复制强类型集合的成员