重新排序动态集合

时间:2015-07-20 15:49:00

标签: c# collections real-time

我的数据上贴有来自客户端的时间戳,并通过网络套接字传递给我的服务器。

有时订单会出错,这意味着时间戳的顺序错误。 所以,我创建了一个SortedDictionary集合对象:

  public SortedDictionary<Int64, string> Manifest = new SortedDictionary<Int64, string>();

这些数据变得越来越快(尽可能快),并且实时每秒多达10个数据“块”。

但是,有时候下一个数据“阻止”可能需要10秒才能完成。

另一个应该接收此数据流正确顺序的客户端也需要是实时的。

但是,就我所见,这个实时需求是无法完成的,所以我考虑创建一个10秒钟的数据缓存。

现在,您会认为这很容易,但我遇到了错误,例如:

'entry already added'
'cannot find key'

这些错误似乎源于您无法在阅读时修改此类集合的事实。

到目前为止我的代码是这样的:

在我的网络套接字中的接收事件中,我有这个:

Manifest.Add(timestamp, 'data');

然后,说我的计时器(每100毫秒运行一次):

var pts = Manifest.ElementAt(0);
var key = res.TS;
//my 10 second cache
if (Convert.ToInt64(DateTime.Now.ToString("yyyyMMddHHmmssfff")) - key >= 10000)
{
    //send the data
    SendDataToClients(key .data);
    //remove send data from queue
    Manifest.Remove(res);
}

现在,我相信人们会说问题是我在阅读它的同时添加到此集合中,解决此问题的方法是使用锁定。

但我厌恶使用锁,因为它可以产生开销,因为我实时处理(尽管有第二次延迟)我承担不起任何开销。

他们有其他方法吗?我整天都在努力,并尝试了很多东西。

以上是我最好的方法。

0 个答案:

没有答案