Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于管理流式视频帧的队列字典_C#_.net_Wcf_Queue_Parallel Processing - Fatal编程技术网

C# 用于管理流式视频帧的队列字典

C# 用于管理流式视频帧的队列字典,c#,.net,wcf,queue,parallel-processing,C#,.net,Wcf,Queue,Parallel Processing,我正在开发一个系统,可以分析来自多个摄像机的视频帧。每个摄像头将初始化WCF会话,并在发送视频帧之前分配一个用于标识的GUID。随着摄像头数量的增加,处理负载超过了服务器实时完成的任务。因此,我正在编写一个类来管理数据,因为数据是从运动激活的摄像机中突发而来的 摄像机的每一帧都必须与其他摄像机的帧平行分析。每个摄像头都将用帧填充队列,以管理数据的FIFO性质 排队的管理让我一直在寻找想法。最初我打算创建一个字典并插入每个GUID队列对。在编写代码一段时间后,我开始认为这不是最好的方法。有人有什么

我正在开发一个系统,可以分析来自多个摄像机的视频帧。每个摄像头将初始化WCF会话,并在发送视频帧之前分配一个用于标识的GUID。随着摄像头数量的增加,处理负载超过了服务器实时完成的任务。因此,我正在编写一个类来管理数据,因为数据是从运动激活的摄像机中突发而来的

摄像机的每一帧都必须与其他摄像机的帧平行分析。每个摄像头都将用帧填充队列,以管理数据的FIFO性质

排队的管理让我一直在寻找想法。最初我打算创建一个字典并插入每个GUID队列对。在编写代码一段时间后,我开始认为这不是最好的方法。有人有什么建议吗

一些简化的示例代码:

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;
        }
    }
}

目前,如果我为一定数量的摄像机硬编码,系统就会工作。让它与不同数量的摄像机一起工作更具挑战性。如果您有任何建议或建议,我们将不胜感激。

.NETFrameWOK4有一个名为Parallel的类。这个类有一个Foreach扩展方法。通过你的集合,你可以做一些类似Parallel.Foreach(集合,动作)的事情,

基于你的
Parallel
标记,我假设你在.NET 4?@M.Babcock上。是的,我正在.NET 4.0框架内开发。在研究了Parallel类之后,我想我可能最终会使用它。它以其当前的形式工作,但这是一种更简洁的方法,用于启动数据处理。