我正在使用.net framework 4.0在Windows窗体中开发股票市场应用程序。我正在从交易所实时获取蜱虫。我能够实时收到报价。在我的场景中,我必须创建一个线程,它将在通用集合中编写实时源。其他连续运行的后台线程将从集合&做进一步处理。为实现这一点,我使用了 ConcurrentDictionary 和 ConcurrentQueue 的组合。 Key conatins符号名称& value包含ConcurrentQueue。这就是它的实施方式Check first answer
这很好用我唯一关心的是延迟。由于股票价格必须实时波动,这个过程导致1秒的延迟。这个场景可以通过其他一些逻辑实现,还是可以以某种方式提高ConcurrentDictionary或ConcurrentQueue的性能以避免延迟?
答案 0 :(得分:3)
你真的需要并发字典吗?只有在找到新符号时,您的字典才会更改。如果你碰巧事先知道了所有的符号,你可以创建一个普通的字典,每个符号用一个队列填充它就是这样 - 字典永远不会改变它。
我不确定你的处理线程是如何工作的 - 它如何知道下一个要查看的队列?它是否遍历所有队列以查看是否还有更多数据?也许您需要的只是一个ConcurrentQueue
,它将保存所有股票市场事件,并将其分成背景中的单独容器(可能没有同步)。
答案 1 :(得分:1)
为什么不将包含stmbol-id和相应页面的对象排队,通过工作线程将其出列(不为每个符号id分配专用线程),然后,工作线程将页面发送到通过使用简单的switch case语句,根据符号id进行正确处理。
这样,您不必检查符号是否存在队列。您将只有一个类型为AND的线程安全队列,您可以使用ThreadPool进行处理!
工作线程将执行此操作:
IdPagePair pair = market.Dequeue();
if (pair.Id == 1) { Process1(pair.Page); }
else
if (pair.Id == 2) { Process2(pair.Page); }
// etc...