Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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# 使用web服务进行连续上载的最佳方法_C#_Web Services - Fatal编程技术网

C# 使用web服务进行连续上载的最佳方法

C# 使用web服务进行连续上载的最佳方法,c#,web-services,C#,Web Services,我以前也问过类似的问题,我所用的答案在这个截然不同的场景中不起作用 我有一个winform桌面c#应用程序 在计时器内(间隔100ms),我将位图转换为字节数组 我有一个每秒10个位图的流 然后将这些字节上载到服务器 处理此问题的服务器没有问题 在客户端,我使用异步方法创建[web服务] 我正在检查一个条件,即在上一次调用完成之前不能再次调用[web service] 如果服务器未及时响应,帧/图像将被“跳过” 这是我的客户代码: public void Init()

我以前也问过类似的问题,我所用的答案在这个截然不同的场景中不起作用

我有一个winform桌面c#应用程序

在计时器内(间隔100ms),我将位图转换为字节数组

我有一个每秒10个位图的流

然后将这些字节上载到服务器

处理此问题的服务器没有问题

在客户端,我使用异步方法创建[web服务]

我正在检查一个条件,即在上一次调用完成之前不能再次调用[web service]

如果服务器未及时响应,帧/图像将被“跳过”

这是我的客户代码:

     public void Init()
        {
            _live.StreamerCompleted += new wsLive.StreamerCompletedEventHandler(_live_StreamerCompleted);
        }

        private void _live_StreamerCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            _uploaded = true;
        }

 private static bool _uploaded = true;
private static wsLive.Live _live = new wsLive.Live();
  private static byte[] imageToByteArray(Image imageIn)
        {
            MemoryStream ms = new MemoryStream();
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            imageIn.Dispose();
            return ms.ToArray();
        }
  public static void AddFrame(Image<Bgr, Byte> _newFrame)
        {
            if (_newFrame != null && _uploaded)
            {
                byte[] _data = GetDeflated(_newFrame.Copy());
                _live.StreamerAsync(Shared.Alias, _data, Guid.NewGuid().ToString());
                _newFrame.Dispose();
            }
        }

        public static void AddFrame(Bitmap _newFrame)
        {
            byte[] _data = imageToByteArray(_newFrame);
            _live.StreamerAsync(Shared.Alias, _data, Guid.NewGuid().ToString());
            _newFrame.Dispose();
        }

    //declared at form load
    Init();

    //inside my timer...
    if (Uploaded)
    {
    LiveStreaming.AddFrame((Bitmap)_currentFrame.Clone());
    }
    _currentFrame.dispose();
public void Init()
{
_live.StreamerCompleted+=新wsLive.StreamerCompletedEventHandler(\u live\u StreamerCompleted);
}
private void\u live\u StreamerCompleted(对象发送方,System.ComponentModel.AsyncCompletedEventArgs e)
{
_上传=真;
}
私有静态bool\u上传=真;
私有静态wsLive.Live _Live=new wsLive.Live();
专用静态字节[]imageToByteArray(图像imageIn)
{
MemoryStream ms=新的MemoryStream();
保存(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
Dispose();
返回ToArray女士();
}
公共静态void AddFrame(图像_newFrame)
{
如果(_newFrame!=null&&u上传)
{
字节[]_data=GetDeflated(_newFrame.Copy());
_live.StreamerAsync(Shared.Alias,_data,Guid.NewGuid().ToString());
_newFrame.Dispose();
}
}
公共静态void AddFrame(位图_newFrame)
{
字节[]\u数据=imageToByteArray(\u新帧);
_live.StreamerAsync(Shared.Alias,_data,Guid.NewGuid().ToString());
_newFrame.Dispose();
}
//在表单加载时声明
Init();
//在我的计时器里。。。
如果(上传)
{
LiveStreaming.AddFrame((位图)_currentFrame.Clone());
}
_currentFrame.dispose();
但是记忆在上升。我这样做对吗


谢谢

一个突出的问题是您没有处理imageToByteArray中的MemoryStream

试试这个:

  private static byte[] imageToByteArray(Image imageIn)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            imageIn.Dispose();
            return ms.ToArray();
        }
    }

嗨,谢谢你看这个。非常感谢。你说得很对,溪流没有关闭。我会看看这是否会给人留下印象:)RAM的使用率在以前达到了80%,现在稳定在60%,所以这肯定是一个进步。。。