我们需要为使用C#开发的应用程序开发某种类型的缓冲区管理。
本质上,应用程序在设备进入时接收消息(在短时间内可能会有许多消息)。我们需要在某种类型的缓冲池中对它们进行排队,这样我们才能以托管的方式处理它们。
我们正在考虑以256字节为单位分配一个内存块(所有消息都小于这个大小),然后使用缓冲池管理来拥有一个可用于传入消息的缓冲池和一个准备处理的缓冲池。
因此,流程将是“获取缓冲区”(处理它)“释放缓冲区”或“将其留在池中”。我们还需要知道缓冲区何时被填满。
潜在地,我们还需要一种方法来“窥视”缓冲区,以查看池中优先级最高的缓冲区是什么,而不是总是获取下一个缓冲区。
在.NET中是否已经支持这一点,或者是否有一些我们可以使用的开放源代码?
发布于 2008-11-11 21:14:00
我也在做类似的事情。我有从MTA线程传入的消息,需要在STA线程上提供服务。
我使用了一个BlockingCollection (并行fx扩展的一部分),它由几个STA线程监控(可配置,但缺省为xr *内核数量)。每个线程都会尝试从队列中弹出一条消息。它们要么超时并重试,要么成功弹出一条消息并为其提供服务。
我已经将它与perfmon计数器连接起来,以跟踪空闲时间、作业长度、传入消息等,这些可以用来调整队列的设置。
您必须实现一个自定义集合,或者可能扩展BC,以实现队列项优先级。
我以这种方式实现它的原因之一是,据我所知,queueing theory通常偏爱单行、多服务器(为什么我觉得我会对此一无所知?)。
https://stackoverflow.com/questions/281924
复制相似问题