我正在开发一个系统,用于分析来自多个摄像头的视频帧。每个摄像机将初始化WCF会话,并在发送视频帧之前为其分配GUID以进行识别。随着摄像机数量的增长,处理负载超过服务器可以实时完成的。因此,我正在编写一个类来管理数据,因为它是从动作激活的摄像机突然到达的。
摄像机的每个帧必须与其他摄像机的帧并行分析。每个摄像机都将填充一个带有帧的队列,以管理数据的FIFO性质。
Queues的管理让我找到了想法。最初我打算创建一个字典并插入每个GUID-Queue对。在编写代码一段时间后,我开始认为这不是最好的方法。有没有人有任何建议?
一些简化的示例代码:
namespace DataCollection
{
[ServiceBehavior(Name = "ClientDataView", InstanceContextMode = InstanceContextMode.Single)]
public class DataCollectionService : IDataCollectionService
{
//Dictionary of Guid-Queue pairs
CameraCollection CameraArray = new CameraCollection();
public Guid RegisterCamera()
{
Guid ID = new Guid();
WorkQueue FrameQueue = new WorkQueue();
CameraArray.AddCamera(ID, FrameQueue)
return ID;
}
public bool SendData(Guid ID, FrameReady newFrame)
{
Frame dataFrame = newFrame.OpenFrame;
WorkQueue que = CameraArray.GetQueueReference(ID);
que.QueueFrame(dataFrame);
return true;
}
}
}
目前,如果我对一定数量的摄像机进行硬编码,则系统可以正常工作。让它与不同数量的相机一起工作更具挑战性。任何建议或建议将不胜感激。
答案 0 :(得分:0)
.Net framework 4有一个名为Parallel的类。这个类有一个扩展方法Foreach。使用您的集合,您可以执行Parallel.Foreach(集合,操作),
之类的操作