我有一台服务器接收来自客户端的批量信号样本。每批可包含多达1000个样品,每秒接收一次(1000 Hz)。一旦我收到样本,我想通过Observable在本地发布它们,它们是从信号源设备生成的频率。我已经整理了以下概念代码来完成我想要做的事情。
LINQPad代码:
var frequency = 1000; // samples / second
int sampleCount = 1000;
var samples = Enumerable.Range(1, sampleCount).ToArray();
ManualResetEvent done = new ManualResetEvent(false);
int count = 0;
Stopwatch sw = new Stopwatch();
sw.Start();
samples.ToObservable()
.Do(_ => Thread.Sleep(1000/frequency))
.Subscribe((next) => count++, () => { sw.Stop(); done.Set(); });
done.WaitOne();
sw.ElapsedMilliseconds.Dump("Subscription duration");
count.Dump("Items observed");
我尝试了其他方法来模拟样本之间的延迟,但是在如此高的频率下,任何基于计时器或基于任务的方法显然都有太多的开销来跟上。所以我的问题是:
提前致谢!