【发布时间】:2012-02-09 05:49:10
【问题描述】:
我正在开发一个系统,该系统将分析来自多个摄像机的视频帧。每个摄像头都会初始化一个 WCF 会话,并在发送视频帧之前分配一个 GUID 用于识别。随着摄像机数量的增加,处理负载超过了服务器可以实时完成的任务。因此,我正在编写一个类来管理来自运动激活相机的数据。
必须对来自摄像机的每一帧与来自其他摄像机的帧进行并行分析。每个摄像头都会用帧填充队列,以管理数据的 FIFO 特性。
队列管理让我一直在寻找想法。最初我打算创建一个字典并插入每个 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;
}
}
}
目前,如果我为一定数量的摄像机对所有内容进行硬编码,则系统可以正常工作。让它与不同数量的相机一起工作更具挑战性。任何建议或建议将不胜感激。
【问题讨论】:
-
根据您的
parallel标签,我假设您使用的是 .NET 4? -
@M.Babcock 是的,我正在.Net 4.0 框架内开发。
标签: c# .net wcf queue parallel-processing