我是否应该在网络服务电话上打电话?

时间:2013-12-21 19:51:25

标签: c# asp.net web-services

我有一个我在循环中调用的Web服务。

我也称它为异步。

我应该在每次通话后关闭()它还是让它打开?

如果我反复打开()并关闭网络服务

,我担心处理时间会更长

和: 内存积累(某些地方)如果不关闭它?

我正在使用C#。

这是我的代码:

   private void UploadToCloud()
    {
        while (true)
        {
            try
            {
                lock (syncNewMotion)
                {
                    Monitor.Wait(syncNewMotion);
                }

                for (ActiveCamIndex = 0; ActiveCamIndex < 4; ActiveCamIndex++)
                {
                    MotionFrame motion = GetNextUpload();
                    if (motion != null)
                    {
                        request.UploadMotion(motion.Frame, Shared.Alias, motion.camIndex, motion.MessageLog);  // I am call non -async here 
                        //because if I do this:
                        //request.UploadMotionAsync(motion.Frame, Shared.Alias, motion.camIndex, motion.MessageLog, Guid.NewGuid().ToString());
                        //I am worried about the router being overloaded.

                    }
                }
            }
            catch (Exception ex)
            {
                request.Abort();
            }
        }
    }

一旦我知道我得到了一些新数据我称之为:

    public void SetCurrentFrame(byte[] jpegData, Int16 camIndex, byte[] messageLog, Int64 timestamp)
    {
        CurrentMotionFrame.Timestamp = timestamp;
        CurrentMotionFrame.MessageLog = messageLog;
        CurrentMotionFrame.camIndex = camIndex;
        CurrentMotionFrame.Frame = jpegData;
        switch (camIndex)
        {
            case 0:
                if (motionQueue1.Count < 160)
                {   
                    motionQueue1.Enqueue(CurrentMotionFrame);
                }
                break;
            case 1:
                if (motionQueue2.Count < 160)
                {
                    motionQueue2.Enqueue(CurrentMotionFrame);
                }
                break;
            case 2:
                if (motionQueue3.Count < 160)
                {
                    motionQueue3.Enqueue(CurrentMotionFrame);
                }
                break;
            case 3:
                if (motionQueue4.Count < 160)
                {
                    motionQueue4.Enqueue(CurrentMotionFrame);
                }
                break;
        }
        NotifyNewUpload();
    }

我用这个开始循环:

Thread thUpload = new Thread(UploadToCloud);
thUpload.Start();

我很可能会做一整个错误目录,但是长期以来一直在研究这个项目,很难退一步。

欢迎任何建议/批评

由于

0 个答案:

没有答案