C#MemoryStream TCP / IP过度使用带宽

时间:2017-06-09 08:22:30

标签: c# .net networking

我创建了一个简单的网络服务器,以每秒25帧的速度向客户端发送网络摄像头的小图像(~0.5mb)。但是,在执行时,我注意到一个相当大的延迟(估计在LAN上2秒),并且当通过任务管理器检查带宽使用时,我使用100%的100 mbps带宽。我是C#/ .NET的新手,并不太清楚为什么/如何发生这种情况。这是主服务器循环:

 image = grabBitmapBlocking();
// Console.WriteLine("FPS: " + Aruco.FpsCounter.CalculateFrameRate());
//image.RotateFlip(RotateFlipType.RotateNoneFlipX);

// save it to jpeg using quality options
m.Position = 10;
image.Save(m, myImageCodecInfo, myEncoderParameters);

// Send the length as a fixed length string
m.Position = 0;
m.Write(Encoding.ASCII.GetBytes((m.Length - 10).ToString("d8") + "\r\n"), 0, 10);
Console.WriteLine("sent " + m.Length + " bytes or " + m.Length / 1e6 + " megabytes");
// send the jpeg image
serv.SendToAll(m);

// Empty the stream
m.SetLength(0);

// remove the image from memory
image.Dispose();
image = null;

任何人都可以向我提出可能的问题吗?

1 个答案:

答案 0 :(得分:-1)

从检查数学开始:

  

以25帧/秒的速度向客户端发送网络摄像头的小图像(~0.5mb)

那是25x0.5兆字节= 12.5兆字节。这需要大约125兆比特的带宽。

  

我利用了100 mbps带宽的100%。

正如数学表明的那样,你需要更多。有一个原因是视频流被编码而不是作为各种位图发送。

  

我是C#/ .NET的新手,并不太清楚为什么/如何发生这种情况。

你想要的是一个视频流,它是用视频编解码器编码的 - 这意味着那些移动很少的图像就像SMALL一样。