gpt4 book ai didi

c# - 在 C# 中的单独线程上快速记录/记录数据

转载 作者:太空狗 更新时间:2023-10-29 19:40:05 24 4
gpt4 key购买 nike

我们正在开发一个应用程序,它可以连续从多个外部硬件设备读取数据。数据速率在 0.5MB - 10MB/秒之间,具体取决于外部硬件配置。

外部设备的读取当前正在 BackgroundWorker 上完成。尝试使用相同的 BackgroundWorker 将获取的数据写入磁盘似乎不是一个好的解决方案,因此我们要做的是将要写入文件的数据排队,并让另一个线程将数据出队并写入一份文件。请注意,数据将只有一个生产者和一个消费者。

我们正在考虑为此目的使用同步队列。但我们认为这个轮子一定已经被发明了很多次,所以我们应该向 SO 社区征求意见。

如果您对我们应该注意的事项提出任何建议或意见,我们将不胜感激。

最佳答案

我会结合 888 先生所做的事情。

基本上你有 2 个后台工作人员,一个从硬件设备读取的。一种将数据写入磁盘的方法。

硬件后台 worker :
Queue<> 中的硬件数据上添加卡盘.无论采用何种格式。

写后台 worker
如果需要解析数据并转储到磁盘。

这里要考虑的一件事是尽可能快地将数据从硬件传输到磁盘很重要吗?
如果是,那么我将基本上在一个循环中进行写入后台测试,在 while 循环中有 100 毫秒或 10 毫秒的 sleep 时间,并检查队列是否有数据。
如果否,那么我会让它休眠一个类似的量(假设您从硬件获得的速度会定期变化)并且只在它有大约 50-60mb 的数据时写入磁盘。我会考虑这样做,因为现代硬盘驱动器每秒可以写入大约 60mb(这是台式机硬盘驱动器,你的 enterprice 曾经可以更快)并且不断地用小卡盘向它写入数据是对 IO 带宽的浪费。

关于c# - 在 C# 中的单独线程上快速记录/记录数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3912542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com